@Shopware AG: Hilfe!!!

Bin gerade dabei, das Shopware-Template (massiv) zu ändern, und laufe jetzt in folgende merkwürdige Exception ("dbg_eval()" ist wohl mein Debugger…) [quote]exception ‚Enlight_Exception‘ with message ‚Property „lex“ not found failure‘ in dbg_eval():1 Stack trace: #dbg_eval()(1): Enlight_Class->__get(‚lex‘) #H:\Apache Group\Apache\htdocs\shopware_powertemplate\shopware\engine\Enlight\Enlight\Controller\Dispatcher\DispatcherDefault.php(331): Enlight_Controller_Dispatcher_DispatcherDefault::dispatch() #H:\Apache Group\Apache\htdocs\shopware_powertemplate\shopware\engine\Enlight\Enlight\Controller\Front.php(88): Enlight_Controller_Dispatcher_DispatcherDefault->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp)) #H:\Apache Group\Apache\htdocs\shopware_powertemplate\shopware\engine\Shopware\Bootstrap.php(21): Enlight_Controller_Front->dispatch() #H:\Apache Group\Apache\htdocs\shopware_powertemplate\shopware\engine\Enlight\Enlight\Application.php(69): Shopware_Bootstrap->run() #H:\Apache Group\Apache\htdocs\shopware_powertemplate\shopware\shopware.php(6): Enlight_Application->run() #{main}[/quote] Any idea, anybody?

Das habe ich so ehrlich gesagt auch noch nicht gesehen - kannst du deinen Debugger mal ausschalten? Scheinbar produziert der ja die Exception - evtl. kollidiert der an irgendeiner Stelle mit Smarty 3?

[quote=“Stefan Hamann”]Das habe ich so ehrlich gesagt auch noch nicht gesehen - kannst du deinen Debugger mal ausschalten? Scheinbar produziert der ja die Exception - evtl. kollidiert der an irgendeiner Stelle mit Smarty 3?[/quote] Das bringt nichts, weil dann nur ein weißer Schirm erscheint… Deshalb habe ich ja den Debugger angeschmissen…

Auf jeder Shopseite? Hast du die kompilierten Templates mal zurückgesetzt? Ist das auch bei den Standard-Templates so, oder nur in deinem angepassten? Kannst du dich ggf. noch erinnern, welche Änderungen du zuletzt durchgeführt hast? Das ist doch wahrscheinlch erst seit kurzem der Fall? Oder lief das Teil von vorn herein nicht lokal?

Hi, das Ausgeben der Exception kann man auch durch das Setzen der Option “throwExceptions” in der Application.php erreichen. Dafür wird dann dein Debugger nicht mehr benötigt und die Exception wird dann hoffentlich etwas aufschlussreicher sein. :slight_smile: Viele Grüße Heiner

[quote=„Stefan Hamann“]Auf jeder Shopseite? Hast du die kompilierten Templates mal zurückgesetzt? Ist das auch bei den Standard-Templates so, oder nur in deinem angepassten? Kannst du dich ggf. noch erinnern, welche Änderungen du zuletzt durchgeführt hast? Das ist doch wahrscheinlch erst seit kurzem der Fall? Oder lief das Teil von vorn herein nicht lokal?[/quote] Ich bin im Moment dabei eine Technik zu untersuchen, die mir eine flexible Positionierung von Elementen auf einer Seite über eine Konfigurationsdatei ermöglicht… Konkret handelt es sich erst mal um die „frontend\home\index.tpl“. Mit der Standard-index.tpl tritt das Problem nicht auf. Zum Hintergrund meiner Änderungen: Wir arbeiten schon lange so, dass wir in einer Konfigurationsdatei definieren, welche Elemente in welcher Reihenfolge auf bestimmten Seiten erscheinen sollen, z.B. auf der „home“-Seite. $elements=array( 'HOME\_SHOW\_BANNER'=\>1, 'HOME\_SHOW\_LIVESHOPPING'=\>2, 'HOME\_SHOW\_WELCOME'=\>3, 'HOME\_SHOW\_PROMOTIONS'=\>4, 'HOME\_SHOW\_BLOG'=\>5, 'HOME\_SHOW\_TAGS'=\>6 ); define\_page\_content\_data($elements,'home','Startseite'); Damit kann ich sehr einfach und ohne das Template anfassen zu müssen, bestimmen, in welcher Reihenfolge die möglichen Elemente erscheinen sollen, bzw. ob sie überhaupt erscheinen sollen (‚ELEMENT‘=>0 wenn nicht). Das muss natürlich durch das Template unterstützt werden. Das sieht dann so aus (ja, ist harter Stoff, hat sich aber bei GAMBIO/xtc und OXID sehr gut bewährt…) [code]{php} //Do the magic! if (INIT_DONE!==true) { define(‚INC_PATH‘,$smarty->template_dir[1].‚frontend/_pt_inc/‘); include(INC_PATH.‚pt_setup.inc.php‘); } {/php} {if $smarty.const.HOME_SHOW_BANNER<>’’} {capture name=$smarty.const.HOME_SHOW_BANNER}

{* Banner *} {$include_file=‚frontend/listing/banner.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if} {include file=$include_file}
{/capture} {/if} {if $smarty.const.HOME_SHOW_LIVESHOPPING<>’’} {capture name=$smarty.const.HOME_SHOW_LIVESHOPPING}
{* Liveshopping *} {$include_file=‚frontend/listing/liveshopping.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if} {include file=$include_file}
{/capture} {/if} {if $smarty.const.HOME_SHOW_WELCOME<>’’} {capture name=$smarty.const.HOME_SHOW_WELCOME}
{* Category headline *} {$include_file=‚frontend/listing/text.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if} {include file=$include_file}
{/capture} {/if} {if $smarty.const.HOME_SHOW_PROMOTIONS<>’’} {capture name=$smarty.const.HOME_SHOW_PROMOTIONS}
{* Promotion *} {$include_file=‚frontend/listing/promotions.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if} {include file=$include_file}
{/capture} {/if} {if $smarty.const.HOME_SHOW_BLOG<>’’ && $sBlog.sArticles|@count} {capture name=$smarty.const.HOME_SHOW_BLOG}
{* Blog Articles *} {$include_file=‚frontend/blog/box.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if}

{se name=‚WidgetsBlogHeadline‘}{/se}:

{foreach from=$sBlog.sArticles item=article key=key name=„counter“} {include file=$include_file sArticle=$article key=$key homepage=true} {/foreach}

{/capture} {/if} {if $smarty.const.HOME_SHOW_TAGS<>’’} {capture name=$smarty.const.HOME_SHOW_TAGS}
{* Tagcloud *} {$include_file=‚frontend/plugins/index/tagcloud.tpl‘} {if $smarty.session.show_template_elements==true}
{$include_file}
{/if} {include file=$include_file}
{/capture} {/if} {capture name=‚main_content‘} {* Main content *}
{if $smarty.const.HOME_SHOW_WELCOME==‚home_element_1‘ && $smarty.const.HOME_SHOW_WELCOME_TOP===true} {assign var=„global_welcome“ value=$smarty.capture.home_element_1|replace:„welcome“:„welcome global“} {else} {$smarty.capture.home_element_1} {/if} {$smarty.capture.home_element_2} {$smarty.capture.home_element_3} {$smarty.capture.home_element_4} {$smarty.capture.home_element_5} {$smarty.capture.home_element_6}
{/capture} {capture name=‚box_RIGHT_CONTEXT‘} {* Sidebar right *} {include file=‚frontend/home/right.tpl‘} {/capture}[/code] Was im Grunde geschieht, ist, dass die einzelnen Seiten-Elemente als Smarty „Captures“ erstellt werden, deren Name aus den Daten der Konfigurationsdatei abgeleitet wird. Am Ende werden diese „Captures“ dann in der gewünschten Reihenfolge ausgegeben… Da meine Shop-Layout-Seite auch anders strukturiert ist, will ich diese Ausgabe nicht direkt haben, sondern packe sie in das „Capture“ „main_content“, um den Content in meiner Layout-Seite an der richtigen Stelle ausgeben zu können. Außerdem möchte ich den Inhalt der rechten Spalte nicht mit dem Seiten-Content zusammen haben (was ja immer zwangsweise auf ein 3-Spalten Layout hinausläuft…), sondern mehr Freihet in der Platzierung haben. Daher wird die rechte Spalte in dem Capture „box_RIGHT_CONTEXT“ gesammelt. So weit, so gut… Ich habe (durch Debugging des kompilierten home/index.tpl-Templates) gesehen, dass das auch prima funktioniert, die „Captures“ „main_content“ und „box_RIGHT_CONTEXT“ enthalten genau das HTML, das ich da drinnen haben wollte… Aber danach geht das dann mit besagter Exception schief… Das besondere an diesem Template ist, dass es selbst keinen Output mehr liefert, da ja alles in Captures landet… Ob das damit zusammen hängen kann?

Eine Möglichkeit selbst mal auf das System zu schauen besteht wahrscheinlich nicht, oder? Ich weiß nicht genau wie die Capture Funktion arbeitet - sofern diese auf den Output-Buffer von PHP aufsetzt, könnte auch hier das Problem liegen? Vielleicht gibt es auf deiner Testumgebung irgendein Konfigurationsproblem? Welche PHP Version verwendest du denn? Die Exceptin wird ja in der Dispatch-Methode des Front_Controllers aufgerufen - hast du probiert, dort die genaue Zeile zu finden? Also wenn der direkt bei $controller->dispatch($action); aussteigt, müsstest du einmal die Werte für $controller & $action mitteilen - ansonsten in die Dispatch Methode des Front-Controllers gehen und schauen wie weit der das Script durchläuft. Das Property Lex wird unsererseits auf jeden Fall nicht definiert oder an irgendeiner Stelle benötigt

Ich war da wohl noch zu sehr in meinen alten Denkmustern verhaftet… :oops: Ich habe das jetzt mal „Smarty 3“-konform über die „blocks“ versucht, und da gibt es dann keine Problem mehr…