Theme und Plugin-Logik zusammenführen?

Hallo Entwickler-Gemeinde,

ich bin neu in Shopware und setze gerade auf Basis des Response-Theme an ein neues Layout um. Eine Anforderung war dabei aus dem Checkout-Info Widget (Mein Konto, Merkzettel und Warenkorb) die zwei Buttins Mein Konto und Merkzettel in die Top-Bar zu verlagern. Nach ersten Anpassungen muss ich feststellen, dass das einfach ausblenden aus dem Widget und Code rüberkopieren in das Topbar Template nicht ausreicht, weil daduch diese Buttons nicht mehr aus einem Widget kommen und cached werden. Hätte ich das komplette Widget nach oben gezogen, wäre es kein Problem, jedoch gabe ich so keinen Zugriff mehr auf die Variablen die ich in den beiden Buttons benötige.

Meine Lösung war die Erstellung eines neuen Plugins, welches ein weiteres Widget bereitstellt mit zwei Actions und zwei Views, welche dann für die Buttons benutzt wurden. Dadurch konnte ich auch die Session-Variablen an die Views übergeben, so dass die Funktionalität wieder hergestellt war.

Erste Frage: Ist das die Lösung die man verwenden sollte, oder gibt es bessere Ansätze?

Zweite Frage: Jetzt habe ich im Theme die Views des Templates als Widget verlinkt. So lange das Plugin aber nicht installiert oder deaktiviert ist, hagelt es natürlich Fehlermeldungen. Kann ich die Logik aus dem Plugin irgendwie direkt in das Theme übernehmen? Oder kann ich Plugins als Abhängigkeit für ein Theme deklarieren?

Freundliche Grüße
Patrick

Also ich würde empfehlen, dass Theme als Plug-In anzulegen und aus dem Plug-In + Theme ein Plug-In-Theme zu machen.

Die Bootstrap besitzt jedoch eine Funktion um auf Plug-Ins zu testen:

 assertRequiredPluginsPresent( **array** $plugins)

Ausgehend davon kannst du dir eine Funktion schreiben die auf ein bestimmtes Theme testet. Ich würde aber ein Plug-In-Theme daraus machen wie hier beschrieben:

https://developers.shopware.com/designers-guide/preparing-themes-for-the-community-store/

Vielen Dank für die Antwort! So lange mein Theme aber als Theme und nicht als Plugin besteht (so dass ich mit Grunt im Themes Ordner darauf zugreifen kann), klappt es nicht?

 

Sonst wäre mir noch die erste Frage sehr wichtig, und zwar ob dieses Vorgehen eigene Widgets die ich per 

{action module=widgets controller=TopBarVariables action=note}

wieder ausgebe der richtige weg ist, oder ob ich hier zu kompliziert denke? Gibt es vielleicht die Möglichkeit den normalen 

{action module=widgets controller=checkout action=info}

Aufruf so anzupassen, dass nur bestimmte Blöcke daraus geladen werden?