Frontend
Dieses Kapitel beschreibt die Client-Seite der Linie für Shopware 6.7: die Storefront-Plugins, die Twig-Vorlagen mit Vue-Direktiven, die Administrations-Bausteine und den Weg, auf dem andere Plugins darauf aufbauen.
Die Storefront-Plugins
src/Resources/app/storefront/src/main.ts registriert fünf JavaScript-Plugins am Shopware-PluginManager. Jedes hängt an einem Datenattribut, das die Twig-Vorlage des CMS-Elements setzt:
Plugin | Selektor | Datei | CMS-Element |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Alle fünf erweitern AbstractEntityListingPlugin aus @leoparden/plugin-tools-storefront. Die Basisklasse schickt die Anfrage an die Store-API-Route aus der Option url. Die Vorlagen nutzen von ihr setLimit(), die Seitennavigation pagination und download(). Jedes Plugin steuert drei Dinge bei:
createBody()liefert den Criteria-Body der Anfrage: Filter, Beziehungen, Sortierung, beiMostBoughtByCustomerzusätzlich die AggregationtermsüberproductNumber(Limit 100).processResponse()macht die SEO-Pfade der Antwort absolut (toAbsoluteUrl) und ruftProcessTransactionResponseFunctionauf.static optionsnennt die Optionen mit ihren Vorgabewerten:typesToShow,group,typeundarchivebeiTransactions;typesundarchivebeiProcesses;openCategoriesbeiArticlesOnOrder;invoiceCategoriesbeiRecentlyDeliveredundMostBoughtByCustomer.
Die Standardsortierfelder sind documentDate (Transactions, Processes), transaction.shippingDate (ArticlesOnOrder) und productNumber (RecentlyDelivered).
Hilfsbausteine
Datei | Inhalt |
|---|---|
|
|
| Setzt nach der Antwort die Sortierrichtung als |
window.salesChannelId und window.activeLanguageId setzt die Vorlage layout/meta.html.twig im Block layout_head_javascript_router.
Twig-Vorlagen
Die Vorlagen liegen unter src/Resources/views/storefront/element. Das Gerüst heißt transactions_base_element.html.twig. Es setzt die Optionen domain und accessKey (Zugangsschlüssel des Verkaufskanals) und rendert Kopfzeile, Liste, Zähler und Seitennavigation. Anders als in der Linie 6.6 setzt es keine Option accessToken. Die Listen füllt Vue im Browser; Twig reicht die Vue-Ausdrücke über {% verbatim %} unverändert durch.
Die Blöcke des Gerüsts:
Block | Inhalt |
|---|---|
| Äußerer Rahmen; hier setzen die Elemente ihre Optionen |
| Innerer Aufbau aus Kopfzeile, Inhalt, Zähler und Seitennavigation |
| Kopfzeile, Titel, Info-Symbol mit Hilfetext |
| Schaltfläche für den CSV-Download |
| Auswahl der Seitengröße |
| Liste oder Tabelle; leer im Gerüst |
| Zähler und Seitennavigation |
Titel und Hilfetext kommen aus den Snippets plugin.leoparden.BusinessTransactions.page.<Elementtyp> und ….<Elementtyp>-help-text; das Element processes setzt sie aus seiner Konfiguration.
Die fünf Element-Vorlagen erweitern das Gerüst mit {% sw_extends %}, überschreiben container und content und setzen im Block container die Optionen für das JavaScript-Plugin:
Der Auszug stammt aus cms-element-processes.html.twig. Im HMR-Betrieb (isHMRMode) biegen die Vorlagen die URL von http://localhost:8000 auf http://localhost:9998 um.
Die überschreibbaren Blöcke der Element-Vorlagen:
Vorlage | Blöcke |
|---|---|
|
|
|
|
|
|
|
|
|
|
Die Spaltenköpfe tragen data-field (Feldpfad für den CSV-Export und die Sortierung) und, wenn sortierbar, data-sortable-key. Ein sortierbarer Kopf ist ein <button type='button'> und kein span, damit er sich per Tastatur erreichen und mit Enter oder Leertaste bedienen lässt; die Bibliothek reagiert auf den Klick, den der Button dabei auslöst. Der Stil für Button und Tastaturfokus steht in scss/base.scss.
Weitere Vorlagen:
page/account/transactions/index.html.twigbindet die Elemente für die Gruppen ein,detail.html.twigzeigt einen einzelnen Vorgang.page/account/sidebar.html.twigergänzt das Kontomenü.component/transactions/state.html.twiggibt den Status eines Vorgangs oder einer Position aus.
Andere Plugins erweitern die Elemente
BusinessCustomProducts (Liste der eigenen Artikel) macht es vor. Ein Plugin, das auf diese Bausteine aufsetzt:
Setzt dieses Plugin voraus (
leoparden/business-transactionsinrequire), da es Dateien daraus lädt.Erweitert das Gerüst in seiner eigenen Element-Vorlage mit
{% sw_extends '@BusinessTransactions/storefront/element/transactions_base_element.html.twig' %}, setzt im Blockcontainerdie eigenen Optionen (mindestensurl) und überschreibtcontent.Importiert die Bausteine aus dem Storefront-Quelltext dieses Plugins, über einen Pfad in der
tsconfig.json:@leoparden/business-transactions-storefront/*. Das webpack-Build und die Jest-Konfiguration lösen jeden Pfad mit dem Präfix@leopardenauscompilerOptions.pathsals Alias auf:import {seoUrls} from "@leoparden/business-transactions-storefront/lib/Filters"; import ProcessTransactionResponseFunction from "@leoparden/business-transactions-storefront/lib/ProcessTransactionResponse.Function";Leitet eine Klasse von
AbstractEntityListingPluginab, implementiertcreateBody()undprocessResponse()und registriert sie amPluginManager.Greift serverseitig über die Kriterien-Ereignisse in die Abfragen der Routen ein (siehe Backend), wenn die Store-API-Routen dieses Plugins mitgenutzt werden. BusinessSalesRepresentative geht so vor.
Administration
src/Resources/app/administration/src/main.ts registriert die Komponenten und die CMS-Elemente. Die Schlüssel der Elemente folgen einem festen Muster, das main.ts als Hilfsfunktionen exportiert:
Hilfsfunktion | Schlüssel |
|---|---|
|
|
|
|
|
|
Jedes Element besteht aus Komponente und Vorschau (Ordner component/ und preview/ unter module/sw-cms/elements/<name>); transactions und processes haben zusätzlich eine Konfigurationskomponente (config/) und eine defaultConfig. Registriert wird mit cmsService.registerCmsElement({ name, label, component, previewComponent, … }).
Komponente | Zweck |
|---|---|
| Liste, Gruppen- und Typformular des Einstellungsmoduls |
| Detailansicht eines Vorgangs |
| Konfigurationsfeld für die Zuordnung Kundengruppe → Typen |
| Symbol der Kachel in den Einstellungen; in der Linie 6.7 die gemeinsame Komponente aus |
| Seiten des Kundenreiters |
| Ergänzt den Reiter „Bisherige Vorgänge" |
| Fügt „Vorgänge" zu den wählbaren Entitäten eines Zusatzfeld-Sets hinzu |
In der Linie 6.7 verwenden die Formulare Meteor-Komponenten (mt-text-field, mt-number-field, mt-button, mt-card, sw-meteor-card); die Listenseite des Moduls liegt in einer sw-meteor-card mit Reitern. Die Karte leoparden-business-transaction-detail hat in dieser Linie eine Schaltfläche Speichern, die den Vorgang über sein Repository speichert.
Die Routen des Kundenreiters (sw.customer.detail.business-transactions und ….business-transactions-detail) hängt die routeMiddleware des Moduls an die Route sw.customer.detail an. Die Texte der Administration stehen in module/business-transactions/snippet/de-DE.json und en-GB.json.
Die gebauten Dateien liegen im Plugin. Nach einer Quelländerung bauen Sie die Administration und die Storefront mit den Skripten des Shops neu (bin/build-administration.sh, bin/build-storefront.sh).