Block in einem Plugin überschreiben, wenn Bedingung erfüllt

Wir haben ein kleines Test-Plugin geschrieben, das den „Kaufen“-Button ausblendet / deaktiviert, wenn der im Admin eingestellte Mindestbestellwert noch nicht erreicht ist. Das funktioniert einwandfrei.

Im Warenkorb Template gibt es aber einen Block {% block component_offcanvas_cart_actions_cart %} in den z.B. die Plugins von PayPal und Amazon schreiben.

Ist ein solches Plugin aktiv, dann reicht es nicht aus, den „normalen“ Kaufen-Button zu deaktivieren, da eine Bezahlung dann ja auch direkt über z.B. PayPal-Express möglich ist.

Wir müssen also dafür sorgen, dass diese Plugins nur dann in den Block schreiben, wenn der Mindestbestellwert erreicht ist. Wenn dieser nicht erreicht ist, dann darf auch die Bezahl-Möglichkeit über PayPal-Express usw. nicht angezeigt werden.

Über das abgeleitete Twig-Template unseres Plugins lässt sich das gewünschte Verhalten nicht erzeugen. Vgl. Dokumentation Twig extends - Documentation - Twig - The flexible, fast, and secure PHP template engine („Contrary to what you might think, this template does not define a block conditionally“)

Hinter dem Problem steckt die grundsätzliche Frage, ob und wie man mit einem Plugin das Verhalten eines anderen Plugins beeinflussen kann.

Wie könnte eine sinnvolle Lösung aussehen?

Wichtig ist vor allem, dass diese Lösung in allen Konstellationen 100% funktionieren muss. Die Existenz eines bestimmten Plugins oder bestimmte Einstellungen eines Plugins dürfen nicht vorausgesetzt werden.

Über eine Lösung bzw. Hinweise, die zu einer Lösung führen, würde ich mich sehr freuen.

Vielen Dank schonmal im Voraus und viele Grüße,
Matthias

Im Theme die Render-Reihenfolge definieren.

{
  //...
  "views": [
    "@Storefront",
    "@Plugins",
    "@MyTheme"
  ],
  //...
}

Vielen Dank für die Rückmeldung.

Diese Lösung passt immer dann, wenn wir den Kunden betreuen und für ihn eine Ableitung des Themes erstellen können.

Das Plugin sollte aber auch ohne eine Änderung / Anpassung des Themes funktionieren.

Seit 6.4.12 kann man mit der Methode getTemplatePriority() die Renderreihenfolge der Plugins bestimmen (default: -1):

2 „Gefällt mir“

Vielen Dank für Deinen Hinweis, das ist die Lösung.

Dieser Issue-Eintrag Shopware Issuetracker beschreibt das Problem genau.

Frage mich allerdings, warum ich diesen nicht bei meiner google Suche gefunden hatte … vielleicht zu ungeduldig.

Jedenfalls nochmal vielen Dank!