Felder aus s_user_attributes in PDF Dokument

Ich habe in meinem eigenen Theme eine index.tpl angelegt um dort Änderungen für die Rechnung zu machen.

Kann man da irgendwie Felder aus der Tabelle s_user_attributes verwenden?

Habe folgende Variable versicht {$User.attributes.feldname}, aber dies hat nicht funktioniert.

Gibt es da eine Lösung?

Gruß Daniel

Hallo Daniel,

ich hatte mir das gestern mal angesehen. Aktuell hast du keinen Zugriff auf die s_user_attributes, da nur die Rechnungs- und Lieferadresse in den Bestellungen vorliegt (s_order_billingaddress und s_order_shippingaddress). Mit etwas rumprobieren habe ich mal einen Pull-Request dafür erstellt: Add s_user_attributes to pdf-documents by mnaczenski · Pull Request #1458 · shopware/shopware · GitHub

Mit etwas Glück sollte es also in eines der nächsten Updates übernommen werden. Dann kannst du wie vorgeschlagen mit {$User.attributes.feldname} darauf zugreifen.

Das könnte dann so aussehen:

{extends file="parent:documents/index.tpl"}
{block name="document_index_address_additionalAddressLines"}
    {$smarty.block.parent}
    {s name="MeinUserAttribut"}Attribut: {/s}{$User.attributes.test}
{/block}

Das Issue-Ticket dafür ist dieses hier: Shopware Issuetracker
Aktuell also nur mit angepasstem Core/Plugin möglich, sobald das Ticket/der Pull-Request umgesetzt ist, auch direkt im Standard.

Moritz

Hallo Moritz,

danke für die Rückmeldung und den Pull-Request.

Dann hoffe ich mal, dass es übernommen wird :slight_smile:

Gruß Daniel

Habe heute auch nochmal geschaut, wie man das als Plugin lösen könnte. Gibt da keinen 100% sauberen Weg, aber so könnte man das machen:

scheduleClearCache(ActivateContext::CACHE_LIST_DEFAULT);
    }
    public function deactivate(DeactivateContext $context)
    {
        $context->scheduleClearCache(DeactivateContext::CACHE_LIST_DEFAULT);
    }

    public static function getSubscribedEvents()
    {
        return [
            'Shopware_Components_Document::assignValues::after' => 'addAttributes'
        ];
    }

    public function addAttributes(\Enlight_Hook_HookArgs $args)
    {
        /* @var \Shopware_Components_Document $document */
        $document = $args->getSubject();
        $order = $document->_order;
        $view = $document->_view;
        $userData = $view->getTemplateVars('User');

        $service = $this->container->get('shopware_attribute.data_loader');
        $sqlUserAttributes = [
            'attributes' => $service->load('s_user_attributes', $order->userID)
        ];

        $userData = $userData + $sqlUserAttributes;

        $view->assign('User', $userData);
    }
}

Eine Datei mit diesem Inhalt unter /custom/plugins/MNAddDocumentData/MNAddDocumentData.php erstellen und dann über den Plugin-Manager installieren. Ich bin aber zuversichtlich, dass das auch relativ zügig im Core landet. Wollte das nur hier gerne dokumentieren, wenn sich mal jemand dran versucht.

Hallo Moritz,

habe soeben Dein Plugin installiert, es funktioniert prima.

Vielen Dank!

Gruß Daniel

1 „Gefällt mir“

Ich habe das Plugin auch installiert.

Allerdings versuche ich in der confirm.tpl im Checkout auf die User Attribute zu zugreifen. Im Template erweitere ich das AGB Label um:

AGB-Hinweis: {$User.attributes.gtc_label}

Ein Freitextfeld für s_user_attributes mit dem Spaltennamen “gtc_label” ist angelegt und für den angemeldeten User befüllt.

Leider bleibt das Label, bis auf “AGB-Hinweis” leer. Sollte die Variable nicht in allen tpl verfügbar sein?

 

VG

Steve

@teleflat schrieb:

Ich habe das Plugin auch installiert.

Allerdings versuche ich in der confirm.tpl im Checkout auf die User Attribute zu zugreifen. Im Template erweitere ich das AGB Label um:

AGB-Hinweis: {$User.attributes.gtc_label}

Ein Freitextfeld für s_user_attributes mit dem Spaltennamen „gtc_label“ ist angelegt und für den angemeldeten User befüllt.

Leider bleibt das Label, bis auf „AGB-Hinweis“ leer. Sollte die Variable nicht in allen tpl verfügbar sein?

 

VG

Steve

Nein. Das Plugin fügt die Variable nur für PDF-Belege hinzu. Das ist auch der einzige Zweck des Plugins.

Ich denke auf der confirm.tpl werden die schon vorhanden sein. Am besten mal die verfügbaren Variablen debuggen:  Debugging Shopware

1 „Gefällt mir“

Stimmt. Ist tatsächlich schon da. Vielen Dank für den Hinweis.

Es kann so einfach sein.

Ich möchte das Thema noch mal aufgreifen. Ich habe das Plugin wie beschrieben installiert (SW 5.4.6). In meinem Theme-Ordner liegt die /documents/index.tpl mit diesem Inhalt:
 

{extends file="parent:documents/index.tpl"}
{block name="document_index_info"}
    {$smarty.block.parent}
    {s name="MeinUserAttribut"}Text: {/s}{$User.attributes.attribute1}abcdefghhhh
{/block}

cache geleert, usw. Es wird aber immer noch das template aus dem bar-Ordner genommen, der Text wird einfach nicht angezeigt. Undecided

Die Dateistruktur passt soweit, es wird aber generell keine Veränderung, egal was ich in meiner index.tpl mache, übernommen.

Jemand ne Idee? Ich bin ratlos…

keiner eine Idee?  Blush

Vielleicht ein Plugin was auch eine documents/index.tpl mitbringt?

eigentlich würde da nur der DHL-Adapter in Frage kommen, sonst läuft nix in die Richtung. Aber kann das sein?

@Gesundwürzen schrieb:

keiner eine Idee?  Blush

Sorry die wahrscheinlich blöde Frage aber hast Du in den Grundeinstellungen / Shop die Dokumententemplates auf dein Theme eingestellt? (Default steht auf Responsive also effektiv Bare).

Happy selling,

Geert 

ja, alles umgestellt, wir haben ja ein eigenes theme laufen.