If-Abfrage vor dem Überschreiben eine Blocks

Hallo Zusammen, ich bin grade dabei ein Plugin zu schreiben und komme an folgenden Punkt nicht weiter. Ich würde gerne den Block {block name=‚frontend_index_header_title‘} nach einer vorgeschalteten if-Abfrage überschrieben. Hierfür habe ich in der Bootstrap eine Variable metastart als boolean definiert: $form-\>setElement('boolean', 'metastart', array( 'label' =\> 'Meta Daten auf der Startseite ändern', 'value' =\> true, 'scope' =\> \Shopware\Models\Config\Element::SCOPE\_SHOP, 'description' =\> '' ) ); In meiner Datei habe ich folgenden Code: {if $DhSeo.metastart == true} {block name='frontend\_index\_header\_title'} Überschreibe diesen Inhalt {/block} {/if} Leider spielt es keine Rolle ob der Werte true oder false ist es wird immer dieser Block überschrieben. Wenn ich die If-Abfrage in den Block lege funktioniert es. Allerdings habe ich dann das Problem das ebenfalls immer überschrieben wird und müsste per else den original Code einbauen. Das ist aber blöd, da ich jedes mal beim einem Shopware Update prüfen müsste ob sich da was geändert hat. Hat jemand eine Idee?

Das if sollte auch vor dem block funktionieren… Alternativ kannst du mit $smarty.block.parent den original block holen, anstatt ihn zu kopieren. Viele Grüße

2 „Gefällt mir“

Danke für deine super schnelle Antwort und dem Tip mit parent. Ich kann mir das nicht erklären voran es liegt. Habe auch versucht die Position des subscribeEvent hoch zu setzten. Ohne Erfolg. Das hatte ich auch noch nicht. Habe jetzt die Bootstap neu geschrieben um einen Fehlerteufel auszuschließen. Leider alles ohne Erfolg. Wie kann man sich den seine eigenen Variablen debuggen. Mit dem Plugin debuggen steht beim meinen Daten leider nur Enlight_Config. Zumindest bei boolan. Die anderen finde ich zumindest in der Datenbasis in einer Tabelle. Im Netz habe ich gefunden: {$var|@var_dump} oder {$var|@print_r}. Habe es in die tpl-Datei eingefügt. Leider ohne erfolg.

Noch mal eine Kurze Rückfrage: Darf ich in unterschiedlichen Events (hier: onPostDispatchDetail und onPostDispatchBlog) die Configuration unter einer Variablen (hier: DhSeo)speichern? Oder ist es besser in diesem Fall zwei Variable (hier z.B.: DhSeoDetail und DhSeoBlog) zu verwenden? Könnte das das Problem hervorrufen? public function onPostDispatchDetail( Enlight\_Event\_EventArgs $arguments ) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Index\*/ $controller = $arguments-\>getSubject(); $request = $controller-\>Request(); $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()-\>DhSeo()-\>Config(); $view-\>DhSeo = $config; //Add our plugin template directory to load our slogan extension. $view-\>addTemplateDir( $this-\>Path() . 'Views/' ); $view-\>extendsTemplate( 'frontend/plugins/dh\_seo/detail/index.tpl' ); } public function onPostDispatchBlog( Enlight\_Event\_EventArgs $arguments ) { /\*\*@var $controller Shopware\_Controllers\_Frontend\_Index\*/ $controller = $arguments-\>getSubject(); $request = $controller-\>Request(); $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()-\>DhSeo()-\>Config(); $view-\>DhSeo = $config; //Add our plugin template directory to load our slogan extension. $view-\>addTemplateDir( $this-\>Path() . 'Views/' ); $view-\>extendsTemplate( 'frontend/plugins/dh\_seo/blog/index.tpl' ); }

Das ist kein Problem - da ja beide Events sowieso nicht gleichzeitig ausgeführt werden. Und deine Beispiele zum debuggen sind soweit korrekt. Ich verstehe dein Problem nur nicht. Viele Grüße

Ja das habe ich mir schon gedacht das es egal ist mit den Events nicht gleichzeitig gefeuert werden. Ich habe jetzt deinen Hinweis mit den smarty.parent umgesetzt und es funktioniert. Allerdings wundert es mich das ich die if-Abfragen nicht vor die Blöcke setzten konnte und das beschäftigt mich doch. Egal wie ich es jetzt gelöst habe möchte ich dennoch einfach verstehen warum das nicht ging. Das nervt mich halt persönlich. :stuck_out_tongue: Dir auf jeden Fall super vielen Dank! Schön das du dich hier im Forum so sehr einsetzt und das zu nahezu jeder Zeit an jedem Wochentag. :thumbup:

Servus, Der zweite Punkte dürfte deine frage beantworten. Bzw. Dürfte dich wieder zur Ruhe bringen :wink: http://www.smarty.net/docs/en/advanced. … itance.tpl