Smarty function in Plugin

Hi, ich {extende} im Plugin die footer-navigation.tpl mit einer {function name=xy}Textbausteine{/function} und rufe sie danach mit {call name=xy} auf. Die in der Funktion enthaltenen Textbausteine werden angelegt, aber im gesammten wird die Funktion und deren Inhalt und alles was danach kommen sollte nicht im Frontend ausgegeben, stattdessen ein 503 unavailable. Hat jemand eine Idee?

Danke und Gruss

@brettvormkopp schrieb:

Hat jemand eine Idee?

Fehlermeldungen anschalten/nachschauen wäre eine Idee. Meistens verraten die einem was kaputt ist.

 http://community.shopware.com/Fehlermeldungen-in-Shopware-debuggen_detail_1880.html?_ga=1.13577143.1686113021.1427122641#Frontend_Error_Reporter

1 Like

Danke für den Tip. Folgenden Fehler wirft das System. 

Fatal error: Uncaught Error: Call to undefined function smarty_template_function_beispielFunktion() in /var/www/example.com/public_html/shop/var/cache/production_201702141330/templates/frontend_Example_de_DE_1_secure/b9/21/c5/b921c5f07ce1b5735d3375bc2ca4976ea6a900b1.snippet.index.tpl.php:2176 Stack trace: #0 /var/www/example.com/public_html/shop/var/cache/production_201702141330/templates/frontend_Example_de_DE_1_secure/b9/21/c5/b921c5f07ce1b5735d3375bc2ca4976ea6a900b1.snippet.index.tpl.php(2086): content_58aab2e7cf6011_86180853(Object(Enlight_Template_Default)) #1 /var/www/example.com/public_html/shop/var/cache/production_201702141330/templates/frontend_Example_de_DE_1_secure/b9/21/c5/b921c5f07ce1b5735d3375bc2ca4976ea6a900b1.snippet.index.tpl.php(553): content_58aab2e7cf3615_08806096(Object(Enlight_Template_Default)) #2 /var/www/example.com/public_html/shop/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(180): content_58aab2e7d777e4_77970896(Object(Enlight_Template_Defaul in /var/www/example.com/public_html/shop/var/cache/production_201702141330/templates/frontend_Example_de_DE_1_secure/b9/21/c5/b921c5f07ce1b5735d3375bc2ca4976ea6a900b1.snippet.index.tpl.php on line 2176
503 Service Unavailable

Mein Aufruf der Funktion war bisher so:

{function name=beispielFunktion}
 {s name="beispielTextbaustein"}jo{/s}
{/function}

{call name=beispielFunktion}

Kurios ist ja, dass die Textbausteine sich automatisch im Backend einpflegen, aber trotzdem ein Fehler kommt?

@brettvormkopp schrieb:

Kurios ist ja, dass die Textbausteine sich automatisch im Backend einpflegen, aber trotzdem ein Fehler kommt?

Die Textbausteine werden (glaube ich) beim parsen bzw. „kompilieren“ der Template Dateien angelegt. Werfe doch mal einen Blick ins Cache Verzeichnis. Dort sind ja die .php Dateien, die aus den Smarty .tpl Dateien entstanden sind. Ich denke dort wurden die Textbausteine schon durch die Texte ersetzt. 

Zeig uns am besten mal deine komplette footer-navigation.tpl. Ich kann mir vorstellen, dass du die Funktion außerhalb eines Blocks definierst (Das ist - wenn man extends benutzt - nicht erlaubt). Alles was außerhalb eines Blocks liegt wird bei „extends“ verworfen. => Smarty kennt deine Funktion nicht mehr. Wink

Ist allerdings nur eine Vermutung. 
Viele Grüße

1 Like

So sieht die komplette Datei aus. 

{extends file="parent:frontend/index/footer-navigation.tpl"}

{function name=beispielFunktion}
  {s name="beispielTextbaustein"}jo{/s}
{/function}

{block name="frontend_index_footer_column_service_hotline"}
  {call name=beispielFunktion}
{/block}

 

Ja und jetzt lese dir meine Vermutung aus meinem vorherigen Post durch  Sticking-out-tongue

Den Teil ab “Ich kann mit vorstellen…”

Hallo,

wie simkli schon sagt: da du die Vererbung anwendest und die Funktion außerhalb eines Blocks implementierst, ignoriert er die Funktion und kennt Sie somit nicht, da er ja die Bare - Datei nutzen und nur bei dieser den Block mit deinem Inhalt überschreiben soll (und gibt deshalb die Fehlermeldung oben aus, da die Funktion ja außerhalb des Blocks ist und somit nicht bekannt).

Beste Grüße

Sebastian

Hi, @sschreier‍ . Wie könnte ich es dann Elegant lösen, da ich 4 Blöcke habe und jedes mal die function innerhalb der Blöcke aufgerufen werden soll? Danke euch.

Eigentlich müsste es reichen, die Funktion im ersten Block, den du überschreibst, zu definieren. Danach solltest du das nicht nochmal tun müssen.
Wichtig ist nur, dass die Funktion vor dem Aufruf definiert wird.

Viele Grüße