[gelöst] Zwei Plugins kommen sich in die Quere | $config

Moin, ich habe zwei Plugin auf das Event: Enlight_Controller_Action_PostDispatch Beide Plugins hängen an unterschiedlichen Smarty Blöcken was an. Leider funktioniert beides parallel nicht. Endwerte funktioniert das eine Plugin, oder das andere. Ich habe es auch schon mit Startwerten versucht: $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' , 100 ); $this-\>subscribeEvent($event); Alles ohne Erfolg. Woran kann es liegen? Danke

Hi, ich kann nun den Fehler auf die Config eingrenzen. Das Plugin wird aufgerufen, aber in der Config Variabel in Smarty steht dann nur: Shopware_Models_Plugin_Config Gebe ich mir aber die Config in der Bootstrap aus, so sind die Einstellungen vorhanden. Woran kann das liegen? Beide Plugins hängen sich beim selben Event ein. Aber nur das erste Plugin, welches zuerst installiert wurde, gibt die Config Variablen ins Template weiter. Das zweite Plugin nicht. Das Problem kann ich beliebig reproduzieren.

Hallo Shopware, gibt es hierzu eine Info?

Hi, kanst du dazu uns mehr Informationen mitteilen? Wie hast du die Blöcke erweitert und mit welcher Config. Wie sieht das Template und die Action bei dir aus. Heißen die Template-Variablen möglicherweise gleich im Template? Heiner

Hi Heiner, hier mal etwas Code vom Plugin 1: $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; ... ... $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/View/'); $view-\>extendsTemplate('templates/index.tpl'); Und in der Templatedatei verwende ich dann: {block name=‚frontend_index_search_container‘ prepend} {/block} Das Plugin ist im Moment als ersten installiert worden und funktioniert. Hier wird keine Config des Plugins abgerufen und ins Template geladen. Das zweite Plugin sieht so aus: $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch2' ); $this-\>subscribeEvent($event); $form = $this-\>Form(); $form-\>setElement('text', 'ImgPath1', array('label'=\>'Bild-Pfad1','value'=\>'/images/icons/austria\_klein.png', 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('text', 'ImgHeight1', array('label'=\>'Bild-Höhe1','value'=\>'25', 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('text', 'ImgWidth1', array('label'=\>'Bild-Breite1','value'=\>'43', 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('checkbox', 'ImgPosition1', array('label'=\>'Position1 absolut(ja) oder fix(nein)','value'=\>true, 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('checkbox', 'ImgLeft1', array('label'=\>'Ausrichtung1 Links(ja) oder Rechts(nein)','value'=\>true, 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('text', 'ImgTop1', array('label'=\>'Abstand1 von Oben','value'=\>'300', 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>setElement('text', 'ImgLink1', array('label'=\>'Bild-Link1','value'=\>'http://www.xxx.at', 'scope'=\>Shopware\_Components\_Form::SCOPE\_SHOP)); $form-\>save(); return true; ... ... public static function onPostDispatch2(Enlight\_Event\_EventArgs $args) { $config = Shopware()-\>Plugins()-\>Frontend()-\>OttAbsoluteImageLink()-\>Config(); $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); if(!$request-\>isDispatched()||$response-\>isException()||$request-\>getModuleName()!='frontend'){ return; } $view = $args-\>getSubject()-\>View(); $view-\>ImageConfig = $config; $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/Views/'); $view-\>extendsTemplate('templates/index.tpl'); } Mache ich nun in der Funktion „onPostDispatch2“ ein var_dump der Variable config, so sehe ich alle Variablen. Schaue ich aber im Template nach der Variable ImageConfig, so hat diese nur den String Shopware_Models_Plugin_Config Ich kann dir gerne den Link und/oder Backend Zugang geben.

Hi, der Template-Name vom 2 zweiten Plugin darf nicht so lauten wie vom ersten. Zumindest nicht der komplette Pfad. Am besten verwendet man so eine Template-Benennung: frontend/plugins/[plugin\_name\_klein]/[template\_name] Heiner

Hi Heiner, danke für den Tipp. Habe ich nun geändert. Aber dies löst leider nicht das Problem. Hast du noch weitere Ideen :wink: ?

Auch die Variablen dürfen nicht den selben Namen haben. Sonst überschreiben sie sich gegenseitig. Im Template-Log wird übrigens bei Objekten immer nur der Klassen-Name ausgeben.

Hi Heiner, ich weiß nicht ob ich mich zu blöd anstelle oder was los ist. Aber doppelte Variablen habe ich ja nicht. Plugin 1: $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/View/'); $view-\>extendsTemplate('templates/OttschoSearchIndex/index.tpl'); Plugin 2: $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); if(!$request-\>isDispatched()||$response-\>isException()||$request-\>getModuleName()!='frontend'){ return; } $view = $args-\>getSubject()-\>View(); $view-\>ImageConfig = Shopware()-\>Plugins()-\>Frontend()-\>OttAbsoluteImageLink()-\>Config(); $view-\>addTemplateDir(dirname(\_\_FILE\_\_).'/Views/'); $view-\>extendsTemplate('templates/OttAbsoluteImageLink/index.tpl');

Hallo Heiner, hast du noch eine Idee?

Hi, nein. Nicht direkt. Kann es so noch nicht nachstellen. Ist das 1. Plugin den komplett? Das hat doch bei deinem Beispiel keine Config. Und wie sehen die Templates dazu aus? Heiner

Hallo Heiner, ich habe die eine PM mit beiden kompletten Bootstrap geschickt. Das erste Plugin hat keine config. Nur das Zweite. Danke dir.

Hallo Heiner, gibt es den schon was neues von der Front?

Hi, ich hab nicht wirklich verstanden was da dein Problem ist. Das erste Plugin, was du mit geschickt hast, hat doch keine Plugin-Config. Was soll da also überschrieben worden sein? Heiner

Hi Heiner, mein Problem ist einfach, dass bei dem zweiten Plugin im der Bootstrap die Variable in der Config noch vorhanden sind. Aber wenn ich diese dann in das Template ausgebe, nicht mehr. Das ertse Plugin hat keine Config. Aber es sitzt auf dem gleichen Event. Ich verstehe nicht warum die Config des zweiten Plugins nicht korrekt im Template erscheint. Dafür muss es doch einen Grund geben. Deinstalliere ich beide Plugins und installiere dann nur noch das Zweite, so funktioniert die Config bzw. so ist diese korrekt in den Template-Variablen vorhanden. Daher muss es irgendeinen Konflikt zwischen den beiden Plugins geben. Aber wie du schon sagst, hat das erste Plugin überhaupt keine Config. Ich verstehe es nicht!

Ich muss das noch mal hoch schieben. Komme einfach nicht weiter!

Ich stehe immer noch vor dem gleichen Problem. Mit der Config hat es nichts zu tun. Aber ich bekomme einfach nicht 2 Plugins, welche den gleichen Event nutzen parallel zum laufen. Woran liegt das? Evtl. könnte es sich auch mal jemand anschauen :wink: