Plugin mit Plugin überschreiben

Hallo, 

mal angenommen ich möchte ein Shopware Premium Plugin mit einem eigenen Plugin überschreiben. Z.B.: das Swag Emotion Advanced.

Dabei registriere ich meine Template Direction am Event: Enlight_Controller_Action_PostDispatchSecure_Widgets_Emotion

Wie kann ich sicher stellen, dass mein Event nach dem Shopware Plugin geladen wird und dessen tpl-Dateien überschreibt?

Hallo,

du kannst bei der Registrierung von Events auch eine Position für deine Callback Methode angeben: Cheat-Sheet for developers

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“

Danke [@Michael Telgmann](http://forum.shopware.com/profile/17553/Michael Telgmann “Michael Telgmann”)‍

 

Jetzt ist es im betreffenden Fall so, dass das Template des Plugin über 

 'Theme\_Inheritance\_Template\_Directories\_Collected' =\> 'onTemplateDirectoriesCollect'

registriert wird. Und mein Event Enlight_Controller_Action_PostDispatchSecure_Widgets_Emotion scheinbar früher startet. 

Und was genau hindert dich daran, ebenfalls dieses Event für deine Template-Pfad Registrierung zu nutzen?  Sticking-out-tongue

Viele Grüße

Dann wird die Seite gar nicht mehr angezeigt. Internal Server Error…

Das Plugin hat noch die alte Plugin-Struktur… falls es was damit zu tun hat. Das Event kann ich nicht verwenden

Okay verwende nun unten stehenden Code. Es überschreibt es aber leider immer noch nicht… das ist aber nur bei dem einen Kunden so… bei mir lokal kein Problem

 

$this->subscribeEvent(
			'Theme_Inheritance_Template_Directories_Collected',
			'onTemplateDirectoriesCollect',
			1000
		);

public function onTemplateDirectoriesCollect(\Enlight_Event_EventArgs $args)
	{
		$dirs = $args->getReturn();
		$dirs[] = __DIR__. '/Views';

	    $args->setReturn($dirs);
	}

In älteren Versionen von SwagEmotionAdvanced wird noch ein anderes Event verwendet:  Enlight_Controller_Action_PostDispatchSecure_Widgets_Emotion

Könnte es sein, dass durch Updates des Plugins das Event  Theme_Inheritance_Template_Directories_Collected hinzukommt und das alte noch bestehen bleibt, bis man das Plugin einmal neu installiert?

Ich kann mir nicht erklären, weshalb meine tpl-Dateien in diesem einen Fall nicht greifen. 

 

//Edit: Gebe ich im SwagEmotionAdvanced in der betreffenden .tpl-Datei {$smarty.block.parent} ein, wird mein Kram geladen. Meine Tempalte Directories sind also vorhanden, werden aber wieder überschrieben… 

 

Ich muss das hier leider noch einmal anstoßen, da es mir nicht möglich ist die Template-Dateien des Plugis EmotionAdvanced zu überschreiben. was könnte ich hier noch prüfen?

Hallo

und einfach mit dem Theme injectBeforePlugins zu arbeiten wäre wohl keine Option? Das Flag einfach umkehren, sodass das Theme nach den Plugins geladen wird und schon sollte der eigene Smarty Block greifen. Dafür brauchts keine Events und kein gar nichts.

 

 

MFG

 

derwunner

@derwunner‍

es geht hier um kein Theme sondern um ein reines Plugin.

@mdsw‍ Geht aber trotzdem. Ein Beispiel: Plugin legt smarty View mit dem Namen “frontend/index/meineview.tpl” an. Das Theme hat ebenfalls eine View mit dem Namen “frontend/index/meineview.tpl”. Welche View nun ausgegeben wird, bzw. welche View welche überschreibt hängt jetzt ganz davon ab, wie im Theme die Variable injectBeforePlugins konfiguriert ist. Ist es der boolsche Wert true, dann wird die Plugin View ausgegeben. Ist der Wert false, dann wird zuerst die Plugin View und danach die Theme View ausgegeben.

@derwunner‍

ich weiß, dass man themes auf beide weisen anlegen kann. 

Hier geht es aber darum, dass ich das Plugin EmotionAdvanced überschreiben möchte, welches seine Template-Dateien über  Theme_Inheritance_Template_Directories_Collected einfügt. Mein Plugin schafft es nicht die tpl-Dateien des Plugins zu überschreiben. Ein Theme spielt hierbei keine Rolle.

Hi,

ich stehe gerade vor einem ähnlichem Problem. Und zwar würde ich gerne Pluginseitig gewisse Frontendanpassungen des swag Bonussystem Plugins überschreiben. Im genauen geht es um die Ausgabe der benütigten Bonuspunkte um den Artikel zu erwerben in den Artikelboxen der Product slider.

Ich habe sämtliche hier vorgeschlagenen Varianten getestet ohne Erfolg. Ausserdem habe ich verschiedenste Events getestet und auch per Priorisierung versucht diese “über” das Bonussystem zu positionieren. Auch die ganzen widget Events etc haben keine erfolg gebracht.

Auch wenn ich die Folders per subscriber/service einbinde schaffe ich es nicht die tpls aus dem bonus system zu überlagern.

 

Zwei Sachen verstehe ich im besonderen nicht:

  1. wie schafft es das Bonussystem sich immer an eine übergeordnetet Stelle zu positionieren da hier ja nichts überschrieben wird.

  2. Wie genau tickt dieser Priorisierungsparameter? Ich kenne diesen aus dem alten Plugin Stack, hier hat er teilweise auch abhilfe gebracht oder - wie im frontendcache plugin - zu problemen geführt. Im neuen Stack habe ich nun schon mehrfach mit dem Parameter experimientiert leider immer ohne jeden Erfolg. Damals war es glaube auch so das nur werte bis X gegriffen haben also ein Wert von 1000 hat dann keinen sinn gemacht wie ist das jetzt? Gefühlt greift hier garnichts egal was ich einstelle.

 

Viele Grüße

Lars Lorenz

 

 

 

Meines Erachtens ist da aktuell ein Bug drin, siehe Consider prioritized hooks in HookExecutionContext::executeReplaceChain by marcop73 · Pull Request #1988 · shopware/shopware · GitHub

Der ist zwar von mir gefixed, da ich aber bisher keine Zeit hatte dafür einen Test zu schreiben, wurde der PR geschlossen.