Nicht alle extendete Template-Dateien im Theme oder Plugins werden genutzt

Hallo liebes Shopware-Forum,

ich nutze die Shopware Version 6.1.3 und hatte schon des Öfteren das Problem, dass die Blöcke, die ich im Theme (oder in einem anderen Plugin) überschreibe bei der Vererbung nicht beachtet werden, wenn ich die selbe Datei schon in einem anderen Plugin extendet habe. Auch wenn es sich um komplett verschiedene Blöcke innerhalb der Dateien handelt.

Das Problem scheint auch nicht immer aufzutreten.
Aktuell hab ich z.B. das Problem, dass lokal das meiste richtig geladen wird, auf dem Abnahmeserver mit der selben Shopware-Version allerdings das Verhalten bzgl. der Vererbung wieder ein anderes zu sein scheint.

Beispiel:

In einem Plugin überschreibe ich die tabs.html.twig

{% sw_extends '@Parent/storefront/page/product-detail/tabs.html.twig' %}

{% block page_product_detail_tabs_navigation_review %}

    {% set preview = page.product.translated.customFields.agenturxy_kunde_products_preview %}
    {% set blurb = page.product.translated.customFields.agenturxy_kunde_products_blurb %}

    {% if preview %}
        
            
                {{ 'agenturxy_kunde_products.preview'|trans|sw_sanitize }}
                
                    {% sw_icon 'arrow-medium-right' style {'pack':'solid'} %}
                
                
                    {{ preview|raw|sw_sanitize|striptags|u.truncate(125) }}
                    {% if preview|length >= 126 %}
                        … {{ "detail.tabsPreviewMore"|trans|sw_sanitize }}
                    {% endif %}
                
            
        
    {% endif %}

    {% if blurb %}
        
            
                {{ 'agenturxy_kunde_products.blurb'|trans|sw_sanitize }}
                
                    {% sw_icon 'arrow-medium-right' style {'pack':'solid'} %}
                
                
                    {{ blurb|raw|striptags|u.truncate(125) }}
                    {% if blurb|length >= 126 %}
                        … {{ "detail.tabsPreviewMore"|trans|sw_sanitize }}
                    {% endif %}
                
            
        
    {% endif %}

    {% if page.extensions.agenturxy_kunde_product_single_issues %}
        
            
                {{ 'agenturxy_kunde_products.singleIssues'|trans|sw_sanitize }}
                
                    {% sw_icon 'arrow-medium-right' style {'pack':'solid'} %}
                
                
                    {{ 'agenturxy_kunde_products.singleIssuesDesc'|trans|sw_sanitize }}
                
            
        
    {% endif %}


    {{ parent() }}


{% endblock %}



{% block page_product_detail_tabs_content_review %}
    {{ parent() }}

    {% sw_include '@Storefront/storefront/page/product-detail/agenturxy-kunde-products-add-fields.html.twig' %}

    {% if page.extensions.agenturxy_kunde_product_single_issues %}
        {% sw_include '@Storefront/storefront/page/product-detail/agenturxy-kunde-products-single-issues.html.twig' with {
            'singleIssues': page.extensions.agenturxy_kunde_product_single_issues
        } %}
    {% endif %}

{% endblock %}

In meinem Theme überschreibe ich diese ebenfalls (diese wird aktuell in der anderen Umgebung ignoriert):
 

{% sw_extends '@Parent/storefront/page/product-detail/tabs.html.twig' %}

{% block page_product_detail_tabs_navigation %}
    
        {% block page_product_detail_tabs_navigation_container %}
            {{ parent() }}
        {% endblock %}
    
{% endblock %}

 

In der Theme.json habe ich die Vererbungsreihenfolge definiert:

 

{
    "views": [
        "@Storefront",
        "@Plugins",
        "@AgenturxyKundeTheme"
    ],
...

Das gleiche Problem hatte ich in der Vergangenheit ebenfalls schonmal bei Änderungen an der base.html.twig, die über ein Plugin und über mein Theme geändert wurde. Gefühlt wird halt immer nur die Datei, die zufällig am höchsten gewichtet, geladen und dann die anderen Dateien, die die selbe Core-Datei aber nicht mal den selben Block extenden, ignoriert.

Hat hier wer eine Idee, woran das liegen könnte?

Liebe Grüße

Ist es möglicherweise das @Parent in deinem Theme-Plugin? Das ist in deiner angegebenen theme.json nicht drin.

Wenn ich das @Parent bei mir ausprobiere ignoriert er es auch.

Das {{ parent() }} sollte reichen zum extenden.

Meiner Meinung nach gehört dort @Storefront.

Nur ein Lucky Guess.

Danke für dein Feedback! Es macht leider keinerlei Unterschied, ob ich nun @Storefront oder @Parent bei sw_extends nutze.

Aber ich versuche hier nochmal ein anderes Beispiel anzuführen, welches die Problematik bei mir aktuell hervorbringt.
Evtl. ist es was einfacher nachzuvollziehen.

Die theme.js beinhaltet wie zuvor auch, die Ladereihenfolge über views:

{
    "views": [
        "@Storefront",
        "@Plugins",
        "@AgenturKundeTheme"
    ],
...

Im Theme, wird die buy-widget-form.html.twig extended (hat keinen Effekt):

{% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-form.html.twig' %}

{% block page_product_detail_buy_quantity_container %}
    
        {% block page_product_detail_buy_quantity %}
            {{ parent() }}
        {% endblock %}
    
{% endblock %}

{% block page_product_detail_buy_button_container %}
    
        {% block page_product_detail_buy_button %}
            {{ parent() }}
        {% endblock %}
    
{% endblock %}

In einem Plugin wird die buy-widget-form.html.twig ebenfalls extended (nur diese Änderung ist sichtbar):

{% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-form.html.twig' %}

{% block page_product_detail_buy_form_inner_csrf %}
    test123
    {{ parent() }}
{% endblock %}

Die buy-widget-form.html.twig wird auch noch von dem SwagPayPal Plugin und von einem weiteren Plugin extended, aber NUR die Anpassungen aus dem zuvor aufgeführten Template werden berücksichtigt.
Wenn ich dieses Plugin deaktiviere, werden nur die Anpassungen aus dem SwagPayPal-Plugin ausgegeben. Wenn ich SwagPayPal auch noch deaktiviere, erst dann werden die Änderungen aus dem Theme und dem dritten Plugin ausgegeben.

Das komische ist, dass diese Templates auf unserem Abnahmeserver aktuell so funktionieren, wenn man APP_ENV auf “dev” stellt. Wenn der Modus auf “prod” steht oder ich es in meiner lokalen Maschine versuche zu testen, funktioniert es nicht.

Bin zwischenzeitlich auf die Ursache des Problems gestoßen: Anscheinend funktioniert cache:clear nicht zuverlässig. Wenn man den Cache mittels

rm -rf var/cache/*

leert, funktioniert alles so wie es soll. Sobald man danach nochmal theme:compile oder cache:clear ausführt, tritt das Problem wieder auf.

D.h. die Plugins und das Theme sind gar nicht das Problem und funktionieren, wie sie sollen. Nur die cache:clear Funktion scheint fehlerhaft zu sein und der Workaround mit dem manuellen Löschen, scheint hier erstmal Abhilfe zu schaffen.

 

1 „Gefällt mir“