Frontend
Die Storefront-Seite besteht aus zwei erweiterten Twig-Templates und einer kleinen JavaScript-Datei. Beide hängen an den Listen-Elementen des Basis-Plugins LeopardenBusinessTransactions. Die Wirkung für Besucher steht unter Vertreter im Kundenkonto, der Überblick unter Entwickler.
Erweiterte Templates
Beide Templates liegen unter src/Resources/views/storefront/element/ und erweitern das gleichnamige Template des Basis-Plugins mit sw_extends. Die Listen werden im Browser von einer Vue-Komponente des Basis-Plugins gerendert; deshalb steht in den Templates {% verbatim %} um die Ausdrücke, die erst im Browser ausgewertet werden.
cms-element-transactions.html.twig (Vorgangsliste)
Überschrieben wird der Block transaction_number. Nach {{ parent() }} fügt das Template ein span mit v-if ein:
Die Kundennummer des angemeldeten Kunden wird beim Rendern auf dem Server eingesetzt (context.customer.customerNumber), die des Vorgang-Besitzers im Browser (transaction.customer.customerNumber). Der Hinweis erscheint nur, wenn beide verschieden sind. Damit transaction.customer im Browser vorhanden ist, muss die Assoziation customer mitgeladen werden (siehe unten).
cms-element-articles-on-order.html.twig (Positionsliste)
Überschrieben werden zwei Blöcke. Beide rufen zuerst {{ parent() }} auf und hängen dann eine Zelle an:
Block | Ergänzung |
|---|---|
| Kopfzelle |
| Zelle |
Die Zusatzspalte steht damit hinter der Spalte, die das Basis-Template in diesen Blöcken ausgibt.
JavaScript
src/Resources/app/storefront/src/main.ts sucht alle Elemente mit dem Attribut data-transactions und registriert dort einen Listener für das Ereignis onBeforeFetch. Der Listener erweitert event.detail.associations um customer: {}; vorhandene Assoziationen bleiben erhalten. Dadurch fordert die Listen-Anfrage den Kunden des Vorgangs mit an, und transaction.customer.customerNumber steht im Template zur Verfügung.
Die Datei importiert den Typ BodyType aus @leoparden/plugin-tools-storefront/shims.d.ts. Das gebaute Bündel liegt im Plugin unter src/Resources/app/storefront/dist/storefront/js/leoparden-business-sales-representative/.
Das Basis-Template setzt am Container das Attribut data-{{ element.type }}. Der Selektor data-transactions trifft daher nur Elemente vom Typ transactions, also die Vorgangsliste. Für die Positionsliste lädt der Subscriber die Assoziation transaction.customer serverseitig, ohne dass dieses Skript beteiligt ist.
Snippets
Schlüssel | de-DE | en-GB | Datei |
|---|---|---|---|
|
|
|
|
Das Plugin liefert keine Snippets für die Administration.