Verzeichnisstruktur
Die WEBSALE Storefront ist logisch in verschiedene Verzeichnisse unterteilt, die die Templates und zugehörigen Ressourcen wie CSS, JavaScript und Bilder strukturieren.Template-Verzeichnis
Das Verzeichnistemplates/ enthält alle HTML-Templates der Storefront. Diese sind in Unterverzeichnisse organisiert, die nach den entsprechenden Controllern benannt sind. Diese Struktur trennt die Vorlagendateien nach den spezifischen Frontend-Bereichen, auf die sie sich beziehen.
templates/components/: Wiederverwendbare Template-Elemente (Includes), beispielsweise Produktboxen.templates/layouts/: Basis-Templates (Layout-Templates), die das allgemeine Grundgerüst aller Shopseiten definieren, beispielsweise Header, Footer und Navigation.templates/mails/: Templates für automatisch versendete E-Mails, beispielsweise Bestellbestätigungen oder Versandbenachrichtigungen. Das Verzeichnismailsist fest vorgegeben und kann nicht umbenannt oder verschoben werden. E-Mail-Templates müssen direkt in diesem Verzeichnis liegen. In den E-Mail-Konfigurationen wird beimtemplate-Parameter nur der Dateiname ohne das Präfixmails/angegeben (siehe E-Mails & E-Mail Einstellungen).templates/pdfs/: Templates für PDF-Ausgaben, beispielsweise Rechnungen oder Lieferscheine.templates/views/: Seiten-Templates (View-Templates) für die einzelnen Shopseiten, beispielsweise Startseite oder Kategorieseiten.
Medien-Verzeichnis
Das Verzeichnismedia/themes/default/ enthält die Ressourcen für die Gestaltung der Storefront, wie Schriftarten, SCSS-Dateien, Bilder und Icons. Dieses Verzeichnis befindet sich auf der gleichen Ebene wie templates/.
templates/ greifen auf die Ressourcen im Verzeichnis media/themes/default/ zu, um das Layout, die Farben, Schriftarten und Bilder der Storefront zu definieren. Dies ermöglicht eine saubere Trennung von Struktur (HTML) und Design (CSS und Medien).
Beispiel für die Einbindung von Ressourcen:
Basis-Template (Layout-Template)
Das Basis-Template, auch als Layout-Template bezeichnet, legt das allgemeine Grundgerüst für alle Seiten der Storefront fest. Es definiert zentrale Inhalte und Bereiche, die auf den meisten Shopseiten wiederverwendet werden, und sorgt so für eine einheitliche Struktur und Benutzerführung. Das Layout-Template ist keine eigenständige Shopseite und kann daher nicht direkt von außen per Link aufgerufen werden. Es wird stattdessen von den spezifischen Seiten-Templates (Views) erweitert oder eingebunden. Das Basis-Template befindet sich im Verzeichnis- Technischer
<head>-Bereich:- Meta-Angaben für Suchmaschinenoptimierung (beispielsweise Title, Description, Keywords).
- Verweise auf die CSS- und JavaScript-Dateien der Storefront.
- Integration von externen Ressourcen wie Schriftarten oder Tracking-Codes.
- Sichtbarer Headerbereich:
- Logo: Darstellung des Shop-Logos.
- Suche: Eingabefeld für die Produktsuche.
- Login-Bereich: Zugriff auf das Kundenkonto.
- Warenkorb und Merkliste: Übersicht über gespeicherte Produkte.
- Navigation: Primäre Navigation des Shops (beispielsweise Kategorien).
- Breadcrumb:
- Anzeige des aktuellen Navigationspfads zur besseren Orientierung der Benutzer.
- Footer:
- Weiterführende Verlinkungen wie Impressum, Datenschutz, AGB.
- Kontaktinformationen oder andere zusätzliche Inhalte.
extends-Befehl eingebunden:
Template-Blöcke
Template-Blöcke bilden die grundlegende Struktur eines Basis-Templates und ermöglichen eine einfache und flexible Anpassung der Storefront. Sie gruppieren die Storefront-Komponenten in kleine, isolierte Blöcke, die unabhängig voneinander bearbeitet oder überschrieben werden können. Dieses Block-System sorgt für eine saubere Struktur und Wiederverwendbarkeit von Inhalten. Template-Blöcke sind klar definierte Bereiche innerhalb eines Templates, die durch das Elementblock gekennzeichnet sind. Sie dienen dazu, die einzelnen Komponenten der Storefront (beispielsweise Header, Footer und Navigation) voneinander zu trennen, sodass sie unabhängig voneinander angepasst werden können.
Beispiel eines Blocks:
Template-Blöcke überschreiben
Ein Template-Block kann in einem View-Template überschrieben werden, um spezifische Anpassungen für einzelne Seiten vorzunehmen. Dazu wird dasblock-Element einfach mit dem gewünschten Quellcode in das View-Template integriert. Das Basis-Template bleibt dabei unverändert.
Beispiel: Überschreiben des Headers für die Startseite
Template-Blöcke erweitern
Es ist auch möglich, bestehende Blöcke zu erweitern, ohne deren ursprünglichen Inhalt zu entfernen. Dafür gibt es die Schlüsselwörterprepend (Inhalt voranstellen) und append (Inhalt anhängen).
Beispiel: Versandkostenfrei-Banner im Header hinzufügen:
View-Templates (Seiten-Templates)
View-Templates definieren die individuellen Inhalte für spezifische Shopseiten und sind die einzigen Templates, die von außen per Link adressierbar sind. Sie basieren in der Regel auf einem Basis-Template und verwenden dessen Blöcke, um eine konsistente Struktur und Gestaltung beizubehalten. View-Templates befinden sich im Verzeichnisimpressum.htm verlinkt.
Direkter URL-Aufruf eines View-Templates
Intern erzeugt$wsViews.viewUrl() eine URL mit den Query-Parametern wsvc=View und view=<dateiname>. Ein View-Template lässt sich damit auch direkt über die Browser-URL aufrufen:
Zusätzliche Query-Parameter (beispielsweise
?wsvc=View&view=account/orderHistory.htm&orderHistorySelect=<ID>) werden an das Template weitergereicht und können dort über $wsViews.params.<name> ausgelesen werden. Verwenden Sie im Template-Code bevorzugt die Funktion $wsViews.viewUrl(), damit URLs korrekt generiert werden und Änderungen am URL-Schema zentral berücksichtigt werden.
Ein View-Template sollte immer ein Basis-Template verwenden. Dadurch wird sichergestellt, dass alle grundlegenden Strukturen wie Header, Footer oder der technische <head>-Bereich aus dem Basis-Template übernommen werden. Die Zuweisung erfolgt immer mit dem Befehl extends:
extends ein Basis-Template zugewiesen wird, darf im View-Template ausschließlich mit Blöcken gearbeitet werden. Bei jedem View-Template kann dann entschieden werden, welche Blöcke des Basis-Templates übernommen, überschrieben oder erweitert werden sollen. Außerhalb von Blöcken darf sich kein Code befinden.
System-Templates
Es gibt drei vordefinierte System-Templates, die nicht umbenannt oder verschoben werden dürfen:start.htm: Definiert die Startseite des Shops.category.htm: Template für die Kategorieseiten.product.htm: Template für die Produktseiten.
CMS-Seitentemplate
Statische Inhaltsseiten, deren Inhalte in strapi gepflegt werden (beispielsweise AGB, Impressum, Zahlungsarten, „Über uns”), werden mit einem eigenen View-Template gerendert. Es gilt für alle CMS-Seiten gemeinsam, es gibt kein Template pro Seite.
Anders als bei den drei System-Templates ist der Name hier frei konfigurierbar. Die Datei ist im Auslieferungszustand nicht enthalten und muss zunächst angelegt werden. Der Aufruf erfolgt nicht über $wsViews.viewUrl(), sondern über die SEO-URL der Seite. Der Shop registriert die Seite, lädt das passende Dokument aus dem Objektspeicher und rendert es mit diesem Template. Wie die Seiten in den Shop gelangen und wie die URL entsteht, ist unter Auslieferung von CMS-Seiten in den Shop beschrieben.
Das Seitendokument $wsCmsPage
Das komplette Seitendokument steht 1:1 als $wsCmsPage bereit, in derselben Struktur wie die JSON-Datei, ohne Umbenennung oder Umsortierung. Die vollständige Referenz des Moduls steht unter $wsCmsPage:
Auf allen Seiten, die keine CMS-Seite sind, ist
$wsCmsPage leer (null) und damit im Template als „falsch” prüfbar. Ein gemeinsames Basis-Template kann so gefahrlos auf CMS-Inhalte prüfen:
fields ist vollständig Aufgabe des Templates. Der Shop liefert nur die Rohdaten und interpretiert sie nicht. Welche Feldnamen und Komponenten es gibt, ergibt sich aus der strapi-Modellierung des jeweiligen Shops. Für den Zugriff wird die Liste einmalig in ein Name/Wert-Objekt überführt:
value.fields) und für die Blöcke von Inhaltsblöcken. Ausführlich beschrieben unter Schritt 4: Feldzugriffe umstellen und Schritt 5: Inhaltsblöcke anpassen.
Behalten Sie beim Rendern der Inhaltsblöcke einen
{{ else }}-Zweig für unbekannte Komponenten. Sonst verschwindet ein neu angelegter Block still aus der Seite, statt aufzufallen:$wsCmsPage.meta.robots und der Shop-Konfiguration zusammengeführten Angaben. $wsCmsPage.meta.hreflang wird nicht automatisch in die hreflang-Ausgabe des Shops übernommen und $wsViews.current.getHreflangAutomatic() liefert für CMS-Seiten nichts aus.
Benutzerdefinierte Templates
Für alle anderen Shopseiten gibt es keine Systemvorgaben. Sie sind frei definierbare View-Templates, die erstellt und frei benannt werden können. Beispielsweise:account.htm: Für das Kundenkontosearch.htm: Für die Sucheimpressum.htm: Für die Impressumsseite
Components (Includes)
Components, auch Includes genannt, sind wiederverwendbare Template-Elemente, die flexibel in verschiedenen Bereichen des Shops eingesetzt werden können. Sie dienen dazu, HTML-Code oder andere Anweisungen (beispielsweise CSS oder JavaScript) zu bündeln und an mehreren Stellen im Shop zu nutzen. Im Gegensatz zu Basis- oder View-Templates enthalten Components keine vollständigen HTML-Seitenstrukturen mitdoctype, <html> oder <body>, sondern nur ausgewählte Code-Schnipsel.
Components befinden sich im Verzeichnis:
- In der Kategorieübersicht, um Produkte in einer Liste darzustellen.
- In den Suchergebnissen, um die Treffer anzuzeigen.
- Auf der Merkliste, um gespeicherte Produkte darzustellen.
- Im Cross-Selling-Bereich auf der Produktdetailseite, um verwandte oder empfohlene Produkte anzuzeigen.
components/productBox.htm:
with an die Component:
