Smarty Block mit Plugin überschreiben

Hallo Zusammen, ich versuche grade mit einem Plugin einen Block im Listing zu überschreiben. Leider funktioniert das nicht. Wenn ich den gleichen Block mit append versehe geht es. Der View wird also im Listing geladen. Was ich mir vorstellen könnte ist, dass der Block auch geladen wird, dann aber durch eine spätere Instante wieder überschrieben wird. Steht das Plugin nicht ganz oben bei der Vererbung? Was wenn ein weiteres Plugin für ein Template diesen Block überschreibt? Kann ich mich mit meinem Plugin drüber stellen? Vielen Dank.

Hallo, Vielleicht könntest du mal deinen Code dazu Posten, dann gibts auch mehr Antworten denke ich, so ist das etwas schwierig dir zu helfen. Du solltest in dem Bootstrap-Plugin auch den korrekten Event nutzen bsp: $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing', 'onPostDispatchListing' );

Bootstrap public function install() { $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing', 'onPostDispatchFrontend' ); $this-\>createForm(); return true; } public function createForm() { $form = $this-\>Form(); $form-\>setElement( 'boolean', 'showTop', array( 'label' =\> 'Kategorie Text über dem Listing anzeigen', 'value' =\> false, 'scope' =\> \Shopware\Models\Config\Element::SCOPE\_SHOP ) ); $form-\>setElement( 'boolean', 'showButton', array( 'label' =\> 'Kategorie Text unter dem Listing anzeigen', 'value' =\> true, 'scope' =\> \Shopware\Models\Config\Element::SCOPE\_SHOP ) ); } public function onPostDispatchFrontend (Enlight\_Event\_EventArgs $arguments) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Index\*/ $controller = $arguments-\>getSubject(); /\*\* \* @var $request Zend\_Controller\_Request\_Http \*/ $request = $controller-\>Request(); /\*\* \* @var $response Zend\_Controller\_Response\_Http \*/ $response = $controller-\>Response(); /\*\* \* @var $view Enlight\_View\_Default \*/ $view = $controller-\>View(); //Check if there is a template and if an exception has occured if(!$request-\>isDispatched()||$response-\>isException()||!$view-\>hasTemplate()) { return; } $config = Shopware()-\>Plugins()-\>Frontend()-\>DohoCattext()-\>Config(); $view-\>DohoCattext = $config; //Add our plugin template directory to load our slogan extension. $view-\>addTemplateDir($this-\>Path() . 'Views/'); $view-\>extendsTemplate('frontend/plugins/doho\_cat\_text/index.tpl'); } index.tpl {\* Category headline \*} {block name="frontend\_listing\_index\_text"} {/block} {block name="frontend\_index\_footer" prepend} {if $DohoCattext.showButton == 1} {include file='frontend/listing/text.tpl'} {/if} {/block} Wie gesagt die Variablen stehen im Template zur Verfügung. Der Block mit prepend funktioniert auch. Nur der Block {block name=“frontend_listing_index_text”} wird nicht überschrieben.

Ich denke das sich hier ein anderes Plugin nach mir dran hängt. Leider geht die Entwicklerbar auf dem Server nicht und das andere Plugin ist lizenzpflichtig. Kann ich irgendwie alternativ rausfinden an welches Event sich ein Plugin registriert? Welches Plugin wird den bevorzugt wenn sich mehrere an dem gleichen Event registrieren?

In der Datenbank stehen alle registrierten Plugins - dazu auch die Reihenfolge der Abarbeitung. Viele Grüße Gesendet von meinem iPhone mit Tapatalk

Hi Aquatuning, meinst du in der s_core_plugins? Dann werden die nach ID abgearbeitet? Edit: Habs gefunden unter der subscribes. Das andere Plugin registriert sich am gleichen Event mit Position 50. Meines mit 0. Was muss ich in der Bootstrap hinzufügen damit ich über dem anderen bin?

Hi, schau mal in der Tabelle s_core_subscribes nach. Hier werden alle Eevnts gelistet, die registriert sind. Die Spalte “position” bestimmt entsprechend die Reihenfolge. BTW: Die Position kannst du bei der Registrierung explizit mit angeben. Viele Grüße, Dennis

Hi Denis, vielen Dank für deine Antwort. [quote]BTW: Die Position kannst du bei der Registrierung explizit mit angeben.[/quote] Wie?

[quote=“artelier”]Hi Denis, vielen Dank für deine Antwort. [quote]BTW: Die Position kannst du bei der Registrierung explizit mit angeben.[/quote] Wie?[/quote] Hi, also dritter Parameter in der subscribeEvent() Funktion. Gruß, Michael

Dazu habe ich eine Frage. Wie kann man es anstellen, das verschiedene oder alle Plugin Templates nicht geladen oder entfernt bzw. Überschrieben werden? Hat da jemand eine Idee? Gesendet von meinem iPhone mit Tapatalk

Danke an alle!

Plugins erweitern templates ja nicht zum Spaß, sondern weil sie die Anpassungen brauchen… Deswegen einfach die Plugins deaktivieren. Viele Grüße Gesendet von meinem iPhone mit Tapatalk

[quote]Plugins erweitern templates ja nicht zum Spaß, sondern weil sie die Anpassungen brauchen… Deswegen einfach die Plugins deaktivieren.[/quote] Das ist natürlich richtig. Aber wenn man z.B. ein Template, wie das neue Resposive als Plugin vorliegen hat, kann man das ja nicht einfach deaktivieren. Natürlich könnte man das ableiten und so Änderungen vornehmen. Ich wollte aber ein Plugin, welches von einem anderen Plugin ganz bewusst nur einzelne Blöcke überschreibt und dieses per Einstellung gezielt angesprochen werden kann.

Dann muss dieses Plugin selber Blöcke zur Verfügung stellen. Oder du setzt die Position deines Plugins in der Datenbank höher und es wird dadurch später aufgerufen. Viele Grüße Gesendet von meinem iPhone mit Tapatalk