Teilweise Weiße Seite bei Bestellabschluss / Problem mit eigenen Smarty

Unsere Kunden bekommen teilweiße eine weiße Seite beim Abschluss der Bestellung. Ich konnte das Problem auch schon teilweise eingrenzen.

Fehlermeldung im Log:

core.ERROR: exception ‘SmartyCompilerException’ with message ‘Syntax Error in template “PfadmeinerDomain/themes/Frontend/Pcb/frontend/index/sidebar-categories.tpl”  on line 10 “{$catergoyArticleInstock = {hidecategory categoryID=$category.id}}” unknown tag “hidecategory”’ in PfadmeinerDomain/engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php:657 Stack trace …

Ich benutze für Kategorien ein eigenes Smarty, dieses ist in der “frontend/index/sidebar-categories.tpl” eingebunden. Das Smarty funktioniert auch problemlos, nur auf der Bestall-Abschlusss Seite macht es Probleme. Leider versteh ich auch nicht weshalb es an dieser Stelle geladen wird. Ich habe in der der finish.tpl den kompletten Bereich “entfernt”.

{block name='frontend_index_content_left'}
{/block}

Zusätzlich habe ich in der index/sidebar.tpl folgende Abfrage eingebaut um das Laden zu verhindern

{if {controllerAction} != "finish"}
     {include file='frontend/index/sidebar-categories.tpl'}
{/if}

( Die sidebar-categories.tpl wird im Block {block name=‘frontend_index_content_left’} und in der Datei “/index/sidebar.tpl” inkludiert )

Für mich stellen sich zwei Fragen:

Warum funktioniert das Smarty nicht auf der Bestellstell Abschluss Seite?

Warum wird es überhaupt geladen?

Das einzige was mir gerade auffällt ist das bei controllerAction ein $ fehlt.

Hallo, wird in der frontend/index/index.tpl genauso eingebunden. Ich schau mal ob ich dort noch etwas anderes versuchen kann.

Habe es jetzt in der sidebar.tpl folgendes ohne Erfolg versucht:

{if $Controller != "checkout"}
                    	{include file='frontend/index/sidebar-categories.tpl'}
{/if}

Hat leider auch nicht geholfen.

Wo kommt denn überhaupt das „hidecategory“ her? Im normalen Shopsystem mit originalen Template finde ich das nicht.

Das ist ein eigenes Smarty um leere Kategorien automatisch aus zu blenden.

Hier der Code:

{$catergoyArticleInstock = {hidecategory categoryID=$category.id}}
{if $catergoyArticleInstock == 0}
    {continue}
{/if}

Ist in der “frontend/index/sidebar-categories.tpl” und “frontend/plugins/advanced_menu/advanced_left.tpl” eingebaut, jeweils in der foreach-Schleife für die Kategorien.

Hmmm, und was soll das „hidecategory“ sein? Variable, Controller? Shopware kann damit nichts anfangen, ich übrigens auch nicht :slight_smile:

Das ist eine eigene Smarty Funktion / Custom Smarty Plugin ( … /_private/smarty/ … ) Diese gibt den Wert 1 oder 0 aus.

siehe: Getting started with Smarty (Register custom Smarty plugins)

Komisch, allein durch die eigene finish.tpl sollte die sidebar-categories.tpl gar nicht mehr im Spiel sein. Muss ich passen, kann ich nicht nachvollziehen.

eigene Smarty Funktionen musst du in der config.php registrieren, siehe unten.

Wenn diese nicht auf der Shopware whitelist stehen, werden wegen smyrty security diverse Fehler produziert.

 [
        //....
    ],
    'template_security' => [
        'php_modifiers' => ['sortby'],
        'php_functions' => ['sortby'],
    ]
];

siehe hier:
https://developers.shopware.com/developers-guide/shopware-5-upgrade-guide-for-developers/#smarty-security-mode

und hier:
http://community.shopware.com/Update-Guide-Shopware-5.2-auf-Shopware-5.3_detail_2011.html#FAQ

Danke, ist aber leider auch nicht die Lösung.

 

Hi webmasterOli,

Ich habe dasselbe Problem, hast du vllt eine Lösung gefunden?

Danke im voraus

mfg Carlos

Ich habe das Smarty ausgebaut und durch einen Cronjob ersetzt. :frowning:

Hallo,

das liegt daran, das Shopware den _private - Ordner auf der Bestellbestätigungsseite vergessen hat mit zu registrieren, deshalb funktioniert ein Smarty - Plugin dort auch nicht, wenn man sich nicht selbst um die Registrierung kümmert. Das Problem wurde aber mit Shopware Version 5.4.0 behoben, siehe: https://issues.shopware.com/issues/SW-15287 .

Grüße

Sebastian

Ok. Danke. Muss ich bei Gelegenheit testen.

Das Merkwürdige war halt, dass die Funktion nicht auf der " Bestellbestätigungsseite " integriert war.