Rate mal mit Shopware

Die älteren werden sich erinnern: Rate mal mit Rosenthal war eine Quizsendung im ZDF. Ich würde das gerne wieder aufleben lassen.

Wo findet man in Shopware die Einstellmöglichkeit, dass Filter sich automatisch aktualisieren (Live reload, AJAX reload oder wie auch immer man das nennen will)?

  • Einstellungen – Grundeinstellungen – Storefront – Filter / Sortierung
  • Artikel – Kategorien
  • Einstellungen – Caches / Performance – Einstellungen – Allgemein – Filter

„Einstellungen – Caches / Performance – Einstellungen – Allgemein – Filter“ ist so richtig wie nicht intuitiv.
Und während sich in „Einstellungen – Caches / Performance – Einstellungen – Allgemein – Kategorien“ Sachen finden, die sich auch in „Einstellungen – Grundeinstellungen – Storefront – Kategorien / Listen“ hat man diese nicht ganz unwichtige Option nicht doppelt und dreifach untergebracht.

Templatevererbung und Namespaces in Shopware

Ihr wollt einen Block in einem Shopware-Template ändern und erweitert daher das Eltern-Template:

{extends file="parent:frontend/listing/text.tpl"}

So weit so bekannt. Wollt ihr jetzt aber in diesem Template Snippets aus dem Elterntemplate ohne Namespace verwenden führt das dazu, dass ein neues Snippet im Namespace eurer neuen Datei (hier also „frontend/listing/text”) angelegt wird.

{s name='ListingActionsCloseOffCanvas'}{/s}

Um das zu verindern müsst ihr einen evtl. gesetzten globalen Namespace nach dem vererben erneut setzen oder den gewünschten Namespace bei jedem Snippet mit angeben.
Also entweder so:

{extends file="parent:frontend/listing/text.tpl"}
{namespace name="frontend/listing/listing"}

Oder so:

{s namespace='frontend/listing/listing' name='ListingActionsCloseOffCanvas'}{/s}

Dynamische Snippets in Smarty

Für den Fall, dass man aus einer Smarty-Variable ein Snippet zaubern will:

{$namespace = "frontend/language"}
{$name = $lang.locale}
{""|snippet:$name:$namespace}

Konkretes Beispiel:
Man hat den locale einer Sprache (z.B. de_DE), möchte aber ganz gerne „Deutsch“ im Frontend ausgeben. Mit dem Code oben geht genau das, Smarty gibt jetzt den Inhalt des Snippets „de_DE“ aus dem Namespace „frontend/language“ aus. Der Namespace ist dabei wichtig, sonst funktioniert es nicht!

Man kann über den cat-Modifier außerdem noch den Namen erweitern, damit man als Snippet-Name nicht nur „de_DE“ in der Datenbank stehen hat:

{$name = "lang_"|cat:$lang.locale}

und bekommt damit lang_de_DE als Name.