Markus Michalski FAQ

Textbausteine: Storefront-Integration

Wo Textbausteine in der Storefront ersetzt werden, mitgelieferte Templates, Twig-Filter mmd_snippets und Funktion mmd_snippet für eigene Templates sowie Hinweise zu Theme-Overrides

English Version

Zurück zur Übersicht

Textbausteine: Storefront-Integration

Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net

Wo Platzhalter ersetzt werden

Das Plugin liefert drei Template-Overrides mit, die den Filter mmd_snippets anwenden. Unter Shopware 6.7 sind davon zwei wirksam. Eigene Template-Änderungen sind dafür nicht nötig.

Stelle Template Block Ausgabe
Beschreibung im CMS-Produktlayout (Element "Produktbeschreibung" des Standard-Produktlayouts) storefront/component/product/description.html.twig component_product_description_content_text HTML, Inhalte der Bausteine bereinigt
Produktkarten (Listen, Suche, CMS-Produkt-Slider und -Listings) storefront/component/product/card/box-standard.html.twig component_product_box_description Nur Text, jedes HTML wird entfernt
Produktdetailseite, Legacy-Template storefront/page/product-detail/description.html.twig page_product_detail_description_content_text Unter Shopware 6.7 inaktiv

Das dritte Template ist unter Shopware 6.7 wirkungslos: Der Shopware-Kern hat in 6.7 kein Template mit diesem Pfad mehr, es ist seit 6.6 als veraltet markiert und wird nicht mehr standardmäßig geladen. Dieser Befund zum Shopware-Kern stammt aus den Quelltexten von Shopware 6.6 und 6.7. Die Plugin-Linie für Shopware 6.5/6.6 liefert dasselbe Template mit, ob der Kern es dort lädt, ist hier nicht geprüft.

Die Ersetzung gilt nur dort, wo der Filter angewendet wird: in der Produktbeschreibung des CMS-Produktlayouts und auf Produktkarten. Sie gilt nicht in CMS-Textelementen, in Kategorie-Beschreibungen, in Zusatzfeldern und in anderen Ausgaben, solange du dort den Filter nicht selbst einsetzt.

graph TD
    A["Produktbeschreibung im Template"] --> B["Twig-Filter mmd_snippets"]
    B --> C["Platzhalter im Text suchen"]
    C --> D["Bausteine laden (Cache oder Datenbank)"]
    D --> E["Inhalt bereinigen und einsetzen"]
    E --> F["Ausgabe in der Storefront"]

Was bei der Ersetzung passiert

Twig-Filter |mmd_snippets

Ersetzt alle Platzhalter in einem String und liefert HTML zurück, das nicht zusätzlich maskiert wird:

{{ product.translated.description|mmd_snippets }}

Ein |raw ist nicht nötig. Ist der übergebene Wert leer, ist das Ergebnis ein leerer String.

Twig-Funktion mmd_snippet('identifier')

Gibt den Inhalt eines einzelnen aktiven Bausteins in der aktuellen Sprache zurück, oder einen leeren String, wenn der Baustein nicht existiert oder inaktiv ist:

{{ mmd_snippet('garantie-info') }}

Die Funktion funktioniert nur in Twig-Templates, nicht in gespeicherten Inhalten wie Produktbeschreibungen. Dort verwendest du die Platzhalter-Syntax. Anders als der Filter bereinigt die Funktion den Inhalt nicht, sie gibt ihn so aus, wie er gespeichert ist. Pflege Bausteine deshalb nur mit Admin-Benutzern, denen du vertraust.

Eigene Templates und Themes

Wenn dein Theme einen der oben genannten Blöcke selbst überschreibt, ersetzt das Plugin dort nichts mehr, weil dann nicht mehr das Plugin-Template die Ausgabe erzeugt. Wende in diesem Fall den Filter im Override an:

{% sw_extends '@Storefront/storefront/component/product/description.html.twig' %}

{% block component_product_description_content_text %}
    <div class="product-detail-description-text" itemprop="description">
        {{ product.translated.description|mmd_snippets }}
    </div>
{% endblock %}

Für andere Inhaltsbereiche setzt du den Filter in deinem eigenen Template auf den jeweiligen Wert.