Ups! Ein Fehler ist aufgetreten! / Bei $smarty.server.REQUEST_URI

Hallo Leute,
habe mal wieder ein kleine … hoffe es ist ein kleines Problem mit „$smarty.server.REQUEST_URI“
Ich habe 15 if und OR abfragen drin, sobald ich einen weiter hinzufügen will, erhalte ich eine Fehlermeldung die wie folgt aussieht:

Ups! Ein Fehler ist aufgetreten!

Die nachfolgenden Hinweise sollten Ihnen weiterhelfen.

Syntax Error in template „/var/www/clients/client1/web4/web/themes/Frontend/InpThemes/frontend/detail/buy.tpl“ on line 88 „OR $smarty.server.REQUEST_URI == ‚/rahmen/1157/bezeichung5‘“ Stack overflow in template parser in engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 657

Stack trace:

#0 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(1727): Smarty_Internal_TemplateCompilerBase->trigger_template_error() #1 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3193): Smarty_Internal_Templateparser->yy_shift() #2 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse() #3 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile() #4 engine/Library/Smarty/sysplugins/smarty_internal_compile_include.php(146): Smarty_Internal_TemplateCompilerBase->compileTemplate() #5 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(465): Smarty_Internal_Compile_Include->compile() #6 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(249): Smarty_Internal_TemplateCompilerBase->callTagCompiler() #7 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(2388): Smarty_Internal_TemplateCompilerBase->compileTag() #8 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r36() #9 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce() #10 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse() #11 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile() #12 engine/Library/Smarty/sysplugins/smarty_internal_compile_include.php(146): Smarty_Internal_TemplateCompilerBase->compileTemplate() #13 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(475): Smarty_Internal_Compile_Include->compile() #14 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(249): Smarty_Internal_TemplateCompilerBase->callTagCompiler() #15 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(2388): Smarty_Internal_TemplateCompilerBase->compileTag() #16 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r36() #17 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce() #18 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse() #19 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile() #20 engine/Library/Smarty/sysplugins/smarty_internal_compile_include.php(146): Smarty_Internal_TemplateCompilerBase->compileTemplate() #21 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(475): Smarty_Internal_Compile_Include->compile() #22 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(249): Smarty_Internal_TemplateCompilerBase->callTagCompiler() #23 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(2388): Smarty_Internal_TemplateCompilerBase->compileTag() #24 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r36() #25 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce() #26 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse() #27 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile() #28 engine/Library/Smarty/sysplugins/smarty_internal_compile_block.php(197): Smarty_Internal_TemplateCompilerBase->compileTemplate() #29 engine/Library/Smarty/sysplugins/smarty_internal_compile_block.php(255): Smarty_Internal_Compile_Block::compileChildBlock() #30 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(465): Smarty_Internal_Compile_Blockclose->compile() #31 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(249): Smarty_Internal_TemplateCompilerBase->callTagCompiler() #32 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(2493): Smarty_Internal_TemplateCompilerBase->compileTag() #33 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3101): Smarty_Internal_Templateparser->yy_r58() #34 engine/Library/Smarty/sysplugins/smarty_internal_templateparser.php(3201): Smarty_Internal_Templateparser->yy_reduce() #35 engine/Library/Smarty/sysplugins/smarty_internal_smartytemplatecompiler.php(105): Smarty_Internal_Templateparser->doParse() #36 engine/Library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php(192): Smarty_Internal_SmartyTemplateCompiler->doCompile() #37 engine/Library/Smarty/sysplugins/smarty_internal_template.php(187): Smarty_Internal_TemplateCompilerBase->compileTemplate() #38 engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(164): Smarty_Internal_Template->compileTemplateSource() #39 engine/Library/Enlight/View/Default.php(295): Smarty_Internal_TemplateBase->fetch() #40 engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(212): Enlight_View_Default->render() #41 engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(238): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->renderTemplate() #42 engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(132): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->render() #43 engine/Library/Enlight/Event/Handler/Default.php(87): Enlight_Controller_Plugins_ViewRenderer_Bootstrap->onPostDispatch() #44 engine/Library/Enlight/Event/EventManager.php(214): Enlight_Event_Handler_Default->execute() #45 engine/Library/Enlight/Controller/Action.php(233): Enlight_Event_EventManager->notify() #46 engine/Library/Enlight/Controller/Dispatcher/Default.php(478): Enlight_Controller_Action->dispatch() #47 engine/Library/Enlight/Controller/Front.php(228): Enlight_Controller_Dispatcher_Default->dispatch() #48 engine/Shopware/Kernel.php(188): Enlight_Controller_Front->dispatch() #49 vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(102): Shopware\Kernel->handle() #50 vendor/symfony/http-kernel/HttpCache/HttpCache.php(453): Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle() #51 engine/Shopware/Components/HttpCache/AppCache.php(261): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward() #52 vendor/symfony/http-kernel/HttpCache/HttpCache.php(426): Shopware\Components\HttpCache\AppCache->forward() #53 vendor/symfony/http-kernel/HttpCache/HttpCache.php(317): Symfony\Component\HttpKernel\HttpCache\HttpCache->fetch() #54 engine/Shopware/Components/HttpCache/AppCache.php(188): Symfony\Component\HttpKernel\HttpCache\HttpCache->lookup() #55 vendor/symfony/http-kernel/HttpCache/HttpCache.php(192): Shopware\Components\HttpCache\AppCache->lookup() #56 engine/Shopware/Components/HttpCache/AppCache.php(113): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle() #57 shopware.php(122): Shopware\Components\HttpCache\AppCache->handle() #58 {main}

und die Abfrage sieht wie folgt aus:

{block name=„frontend_detail_buy_button_container_outer“}
{if (!isset($sArticle.active) || $sArticle.active)}
{if $sArticle.isAvailable}
{block name=„frontend_detail_buy_button_container“}

	{if $smarty.server.REQUEST_URI == '/rahmen/1153/bezeichung1'
	OR $smarty.server.REQUEST_URI == '/rahmen/1154/bezeichung2'
	OR $smarty.server.REQUEST_URI == '/rahmen/1155/bezeichung3'
	OR $smarty.server.REQUEST_URI == '/rahmen/1156/bezeichnung4' 

ab hier sind weiter hinterlegt bis zu 16 OR Abfragen
}
NEUER BUTTON BEZEICHNUNG
{else}
HIER WIRD NOCHMAL EIN BLOCK GENERIERT
{/if}

                {/block}
            {/if}
        {/if}
    {/block}

Jetzt Frage ich mich nur warum er das nur macht wenn ich eine Abfrage hinzufüge?

Ich hoffe einer hat ein Lösungsvorschlag woran es liegen kann.

Besten Dank im voraus

Naja, der Stack ist voll - normalerweise sieht man sowas nur bei rekursiven Aufrufen, aber anscheinend kann das auch bei zu vielen Booleschen Operatoren auftreten. Wenn’s dich interessiert: https://www.educba.com/php-stack-overflow/

Damit das auch für eine große Anzahl von zu prüfenden URLs funktioniert, musst du einen anderen Ansatz wählen:

  1. Pack alle deine zu vergleichenden Werte in ein Array:
{$myURLs = ['/rahmen/1153/bezeichung1','/rahmen/1154/bezeichnung2', '/rahmen/1155/bezeichnung3']}
  1. Dann machst Du einen {foreach} über das Array und setzt eine Boolean Variable, falls der Wert gefunden wird. Direkt danach solltest Du dann noch einen {break} machen, um den foreach direkt zu verlassen.

  2. Im {if} wird dann nur noch diese Variable geprüft.

Theoretisch könnte man auch einfach nur ein

{$smarty.server.REQUEST_URI|in_array:$myURLs}

machen, aber ich glaube SW unterbindet aus Sicherheitsgründen den Aufruf von php Funktionen und Modifiern, daher wird das vermutlich fehlschlagen.

Ein anderer Weg wäre über ein assoziatives Array (key → value), hier könntest Du dann deine zu prüfenden URLs als key nehmen, aber ich kenne die Smarty-Syntax nicht, um ein solches direkt im Template zu erzeugen (weiß das zufällig jemand?)

LG Phil

Irgendwo hier im Forum gibt es einen Beitrag von mir, im welchen ich genau selber vorgeschlagen hatte. Leider finde ich den Post nicht mehr und eine Suche innerhalb meines Profils gibt es nicht. Egal, zumindest kann ich sagen, dass diese Methode durchaus funktioniert. Auch in der aktuellen SW 5.7.x Versionen.

Moin Phil,
hört und sieht gut aus deine Methode, bin aber auch nicht gerade der Smarty Prof., sondern doch eher PHP.
Hast du evtl. ein Beispiel Code wie das genau aussehen kann mit dem {foreach}…?
Wäre dir da echt dankbar für ein Snippet, würde denn dann erweitern…

Besten Dank im voraus

Hallo R4M
auch Dir danke ich für Dein Bemühungen, brauch da nur wirklich ein Beispiel Code, wenn es den gibt. Wie Phil schon beschrieben hat, weiß ich nicht wie ich das mit dem {foreach} genau Coden soll in Smarty.
Hast Du ein Beispiel, evtl. dafür?

Vielen Dank im voraus

Oder gibt es eine Möglichkeit den Stack Overflow zu umgehen oder dieses zu erweitern auf eine bestimmte Menge an Paketen?

foreach wird in diesem Falle gar nicht benötigt. Beispiel:

{$myURLs = ['/demo-1/','/demo-2/', '/demo-5/']}
{if $smarty.server.REQUEST_URI|in_array:$myURLs}
  ... hier meine Ausgabe oder sonst etwas ... 
{/if}

Hi R4M,
hat geklappt mit deinem Snippet, habe es noch was erweitert und jetzt werden alle Artikel mit dem Angepassten Button ausgestattet.
Besten dank.
Versuche auch gerade das Script so zu erweitern, das auch die Varianten mit abgedeckt werden… hast du eine Idee evtl.? Denn ich möchte nicht jede einzelne URL anhängen wie:
Beispiel: /url/?number=ART-21655.1 ‚,‘ /url/?number=ART-21655.2 ‚,‘ /url/?number=ART-21655.3 und so weiter… daher versuche ich auch gerade eine weiter Abfrage für die Endungen zu schreiben…

Nochmal vielen Dank für deine Hilfe :+1:

PS: Solltest du eine Idee dazu haben… schreibe es einfach hier rein…

VIELEN DANK