Zum Inhalt springen

Funktionsweise

Dies ist die wichtigste Seite der Dokumentation. Lesen Sie sie, bevor Sie mit der Konfiguration beginnen — fast jede “das Plugin funktioniert nicht”-Frage stellt sich als Missverständnis des hier beschriebenen Modells heraus.

Shopware unterstützt nativ ein CMS-Layout pro Kategorie, pro Produkt, pro Landing-Seite. Das Plugin ändert daran nichts — es ermöglicht Ihnen nicht, einer Kategorie mehrere Layouts zuzuweisen. Stattdessen agiert es zur Request-Zeit als Ersetzungsschicht:

  1. Shopware lädt die Seite und löst das Basislayout auf normalem Wege auf — das, welches Sie auf der Kategorie (bzw. dem Produkt oder der Landing-Seite) gesetzt haben.
  2. Das Plugin schaut sich jedes Layout an, dem Regeln zugewiesen sind.
  3. Wenn eine Regel zum aktuellen Request passt (Verkaufskanal, Kunde, Datum etc.), tauscht das Plugin das Basislayout gegen diese Alternative aus und rendert stattdessen die Alternative.
  4. Wenn keine Regel passt, wird das Basislayout wie üblich gerendert.

Die entscheidende Folge: Jede Kategorie, jedes Produkt oder jede Landing-Seite, auf die das Plugin reagieren soll, muss bereits ein Basislayout zugewiesen haben (über die normale Shopware-UI). Wenn eine Kategorie kein CMS-Layout hat, hat das Plugin nichts zu ersetzen, und die Seite wird nicht korrekt gerendert.

Für jede der drei Seitenarten — Produkt, Kategorie (Navigation), Landing-Seite — stellt das Plugin drei Stellschrauben bereit:

  1. Ersetzungsmodus — wann darf ein Basislayout ersetzt werden?
  2. Ersetzbare Layouts — (nur relevant für den Modus “Zugewiesen, um ersetzbares Layout zu ersetzen”) die explizite Allow-Liste der Basislayouts, die ersetzt werden dürfen.
  3. Ersetzungstypen — welche CMS-Seitentypen dürfen als Ersatz fungieren? (z. B. darf ein landingpage-Layout eine product_list-Basis ersetzen?)

Alle drei finden Sie unter Einstellungen → Erweiterungen → Advanced Layouts Assigner.

Der Modus steuert, ob das Plugin überhaupt versucht zu ersetzen für ein gegebenes Basislayout. Die Optionen unterscheiden sich leicht je nach Seitenart:

SeitenartOptionen
ProduktseiteOhne zugewiesenes Layout · Zugewiesen, um ersetzbares Layout zu ersetzen · Ohne zugewiesenes Layout oder zugewiesen, um ersetzbares Layout zu ersetzen · Alle
KategorienseiteMit Standardlayout · Zugewiesen, um ersetzbares Layout zu ersetzen · Alle
Landing-SeiteMit Standardlayout · Zugewiesen, um ersetzbares Layout zu ersetzen · Alle
  • Ohne zugewiesenes Layout (nur Produktseite) — ersetzen, wenn das Produkt selbst kein spezifisches Layout hat (und Shopware sonst das Standardlayout verwenden würde).
  • Mit Standardlayout (Kategorie- / Landing-Seite) — ersetzen, wenn die Seite das in Shopware konfigurierte Standardlayout verwendet (das unter Einstellungen → Erlebniswelten → Standardlayouts gesetzte). Eigene per-Kategorie-Layouts werden nicht angerührt.
  • Zugewiesen, um ersetzbares Layout zu ersetzen — ersetzen, wenn das Basislayout in der unter dem Modus-Dropdown gepflegten Liste Ersetzbare Layouts für … explizit aufgeführt ist.
  • Alle — beliebiges Basislayout ersetzen, sobald eine Regel passt. Am einfachsten und die richtige Wahl, wenn Sie wollen, dass alle Kategorienseiten eines bestimmten Verkaufskanals ein anderes Layout verwenden. Dies ist der Modus, den das Mehrere-Verkaufskanäle-Rezept empfiehlt.

Siehe Ersetzungsmodi für die vollständige Matrix und Beispiele.

Selbst wenn ein Basislayout ersetzbar ist, muss das Plugin entscheiden, welche alternativen Layouts in Betracht kommen. Diese Entscheidung wird durch die Karte Ersetzungstypen unten in den Einstellungen begrenzt. Für jede “eingehende” Seitenart listen Sie die CMS-Seitentypen auf, die als Alternative dienen dürfen:

Eingehende SeiteStandard-ErsetzungstypenErweiterbar auf
Produktseiteproduct_detailpage, landingpage, product_list
Shop-Seite (page)pagelandingpage, product_list
Landing-Seitelandingpagepage, product_list
Listing-Seite (product_list)product_listpage, landingpage

Wenn der entsprechende Eintrag leer ist, sucht das Plugin für diese Seitenart überhaupt nicht nach einer Alternative — selbst wenn Regeln passen. Die Post-Install-Routine seeded den naheliegenden Typ pro Art als Default; Sie erweitern diese Liste in der Regel nur, wenn z. B. ein Landing-Seiten-Layout eine Listingseite ersetzen soll.

Das eigentliche Matching erfolgt über Regeln, die dem alternativen Layout zugewiesen sind, nicht über die Kategorie oder das Produkt. Regeln zuweisen:

  1. Inhalte → Erlebniswelten → Layout öffnen
  2. Layout-Zuweisung in der rechten Seitenleiste
  3. Schaltfläche Layout zuweisen
  4. Tab Regeln (durch dieses Plugin hinzugefügt, sitzt neben Kategorien / Produkte / Landing-Seiten)
  5. Regeln auswählen und Bestätigen.

Ein Layout ist nur dann ein Ersetzungskandidat, wenn alle seine zugewiesenen Regeln zum aktuellen Request passen (Regeln werden mit UND verknüpft). Innerhalb einer einzelnen Regel gilt die Standard-Shopware-Container-Logik (UND-Container, ODER-Container etc.).

Konkret beim Aufruf einer Kategorienseite in einem bestimmten Verkaufskanal:

  1. Shopware lädt die Seite und das der Kategorie zugewiesene Basislayout.
  2. Das Plugin ermittelt die für den Basistyp erlaubten Ersetzungstypen (z. B. für product_list → den Eintrag Listing-Seite unter Ersetzungstypen).
  3. Das Plugin prüft den Ersetzungsmodus für Kategorienseiten:
    • Mit Standardlayout → nur fortfahren, wenn das Basislayout das Shopware-Standardlayout ist.
    • Zugewiesen, um ersetzbares Layout zu ersetzen → nur fortfahren, wenn das Basislayout in der Liste Ersetzbare Layouts für Kategorienseiten ist.
    • Alle → fortfahren.
    • Sonst → zurückkehren, keine Ersetzung.
  4. Das Plugin lädt jede CMS-Seite, der Regeln zugewiesen sind, sortiert nach rule.priority (niedrigste Priorität zuerst, im Einklang mit Shopwares eigener Regel-Sortierung). Es geht sie in Seiten von 100 durch (bis zu einem harten Limit — siehe Performance).
  5. Für jeden Kandidaten wertet es alle zugewiesenen Regeln gegen den aktuellen Request aus (Verkaufskanal, Navigations-ID, Kunde, Datum etc.).
  6. Der erste Kandidat, dessen Regeln alle passen, wird verwendet. Das Plugin rendert das Layout für die Seite neu und übergibt es Shopware.
  7. Wenn nichts passt, bleibt das Basislayout.

Dieselbe Schleife läuft für Produkte (über ProductPageLoadedEvent) und Landing-Seiten (über LandingPageLoadedEvent), mit ihren jeweiligen Ersetzungsmodi und -typen.

Zusätzlich zu den Standard-Regelbedingungen von Shopware fügt das Plugin drei eigene hinzu:

  • Ist Startseite [P2Lab Layout Zuweiser] — passt nur auf der Hauptnavigationskategorie des Verkaufskanals (seiner Startseite). Siehe Warnung zur Kombination mit anderen Bedingungen.
  • Element in Kategorie [P2Lab Layout Zuweiser] — passt, wenn das betrachtete Produkt oder die Kategorie eine der aufgelisteten Kategorien ist (oder sich darin befindet).
  • Element in Kategorie mit Unterkategorien [P2Lab Layout Zuweiser] — wie oben, matcht aber auch nachgeordnete Kategorien (nutzt den path der Kategorie, um den Baum zu durchlaufen).

Details siehe Eigene Regelbedingungen.

Jede Einstellung im Konfigurationsformular des Plugins ist pro Verkaufskanal. Verwenden Sie den Verkaufskanal-Umschalter oben in Einstellungen → Erweiterungen → Advanced Layouts Assigner, um unterschiedliche Ersetzungsmodi, ersetzbare Layouts und Ersetzungstypen pro Kanal zu pflegen — mit Rückfall auf den Scope “Alle Verkaufskanäle” für gemeinsame Defaults.

So hält das Plugin denselben Kategoriebaum für zwei Verkaufskanäle mit völlig unterschiedlichen Layout-Strategien nutzbar.

Nachdem das Modell klar ist, gehen Sie ein minimales Beispiel durch: Erste Layout-Ersetzung.