# @Shopware AG: Verständnis-Problem Smarty-Objekte

**URL:** https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705
**Category:** Shopware 3.5
**Tags:** templates--design
**Created:** [16. November 2010 um 06:42 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705 "2010-11-16T06:42:42Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [16. November 2010 um 06:42 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/1 "2010-11-16T06:42:42Z")

</div>

Ich bereite in einer in der „frontend/index/index.tpl“ eingebetteten PHP-Routine den HTML-Code für einige „Boxen“ auf (das sind die Elemente in der Linken und rechten Navi-Leiste). Über das dort schon definierte „$smarty“-Objekt geschieht das z.B. mit „$smarty-\>assign(‚box\_CATEGORIES‘,$box\_code);“ Das funktioniert auch, d.h. im „tpl\_vars“-Array des „$smarty“-Objekts sind alle meine Boxen schön enthalten… Das Problem: Wenn ich jetzt in „frontend/index/index.tpl“ diese Box mit {box\_CATEGORIES} einbinden will, dann ist da kein Code enthalten... Smarty kompiliert diesen Zugriff zu "\_smarty\_tpl-\>getVariable(‚box\_CATEGORIES‘)-\>value". Das bedeutet wohl, dass das „smarty"-Objekt ein anderes ist, als das "\_smarty\_tpl“-Objekt… Das „$\_smarty\_tpl“-Objekt ist aber zu dem Zeitpunkt, an dem ich es benötige, noch nicht definiert… Die Frage ist also: wie bekomme ich meine „Boxen“ in das richtige Smarty-Objekt? Ganz am Anfang von „frontend/index/index.tpl“ ist meine Routine eingebettet mit `{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}` Das erwähnte „$smarty“-Objekt ist dort schon definiert… In den GAMBIO/xtc- und OXID-Umgebungen hat diese Vorgehensweise bisher prima funktioniert, da es nur ein „Smarty“-Objekt gibt, hier ist das anscheinend etwas komplizierter…

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 09:18 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/2 "2010-11-17T09:18:15Z")

</div>

Also eines ist sicher: mit Shopware muss man erst mal alles vergessen, was man bisher mit GAMBIO und OXID so gemacht hat… :wtf: Ich habe mein Problem mit meiner Template-Initialisierung und den „Boxen“ jetzt dadurch lösen können, dass ich das nicht mehr im Template mache, sondern mich in die „View“-Erstellung eingeklinkt habe… Derzeit mache ich das in „engine/Shopware/Plugins/Default/Core/ControllerBase/Bootstrap.php“, wo ich folgenden Code eingefügt habe, der dann eine ganze Reihe von Template-Initialisierungen durchführt, und meine „Boxen“ im „View“ speichert. ` //Avenger //Do the template magic! $aTemplateDirs=Shopware()-\>Template()-\>getTemplateDir(); define('INC\_PATH',$aTemplateDirs[1].'frontend/\_pt\_inc/'); include(INC\_PATH.'pt\_setup.inc.php'); //Avenger ` Das Prinzip funktioniert erfreulicher Weise jetzt schon mal, die Kür (das alles schön systemkonform in ein Plugin verpacken) kommt später… Zumindest wissen wir jetzt, dass unsere gewohnte Arbeitsweise auch bei Shopware funktionieren wird, und das ist schon mal sehr erfreulich. Folgend die ersten „Zuckungen“ eines Shopware-Templates mit komplett anderem Layout… Sieht zwar noch ziemlich aus „wie Hund“, weil das CSS (und eine Reihe anderer Dinge, einschl. dem Layout) überhaupt noch nicht passen, aber das ist jetzt einfach in den Griff zu bekommen… (Die Namespace-Bindung der Textbausteine ( [viewtopic.php?f=14&t=395&p=2679#p2177](http://www.shopware-community.de/viewtopic.php?f=14&t=395&p=2679#p2177) ) hindert auch noch sehr, da kommen dann so unschöne Texte wie „#BreadcrumbDefault#“ zu Stande. Aber da will die Shopware AG ja noch was dran tun, dass man Template Elemente beliebig verlagern kann, ohne dasss die Texte verloren gehen…) [![](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/85c76fb58166cf4de3275b6c73773b974ad2b94e.gif)](http://www.pic-upload.de/view-7791318/swt.gif.html) Das ist so die Art Templates, die wir entwickeln: voll graphisch (auch die individuellen Buttons, Boxenheader usw.)), mit dem Standard-Shopware-Template wird das nicht mehr viel zu tun haben (funktional natürlich schon)… Warum der ganze Aufwand, fragt man sich vielleicht… Weil damit eine ganze Reihe von Automatismen möglich werden, die uns die Arbeit sehr erleichtern. z.B. entsteht der grafische Header einfach dadurch, dass man die Headergrafiken in einem bestimmten Verzeichnis ablegt, ebenso auch Grafiken, die man im Contentbereich haben will. Oder ich kann die „Topseller“-Box einfach in die linke Spalte verlagern, indem ich in einer Box-Konfigurations-Datei die Anweisung `box\_topseller=r,1 (1. Box in der rechten Spalte)` in `box\_topseller=l,5 (5. Box in der linken Spalte)` ändere… Bei den vielen Templates, die wir machen, ist das eine echte Erleichterung, weil man ohne Template-Änderungen (an unserem Standard-Template) das Shop-Layout sehr flexibel handhaben kann. (Und durch die ganzen Untersuchungen lernt man nebenbei die Shopware-Software immer besser kennen… :thumbup: ) Wen es interessiert: hier ein paar (wenige) von powertemplate designte Shops aus de Gambio-/xtc- und OXID-Welt (nichts von der Stange, alles kundenspezifische Maßanzüge…): [http://www.tretwerk.net/](http://www.tretwerk.net/) [http://www.alternative-haustechnik.de/](http://www.alternative-haustechnik.de/) [http://heimhifi.com/](http://heimhifi.com/) [http://digital-readers.de/](http://digital-readers.de/) [http://www.just-sound.de/](http://www.just-sound.de/) [http://www.robosauger.com/](http://www.robosauger.com/) [http://www.powertemplate.de/kunden/yankee/](http://www.powertemplate.de/kunden/yankee/) [http://www.lensshop24.de](http://www.lensshop24.de) [http://www.bioticana.de/](http://www.bioticana.de/) [http://www.doktorhardstuff.de/](http://www.doktorhardstuff.de/) [http://www.savegame24.de/](http://www.savegame24.de/) [http://www.carsystem24.de/](http://www.carsystem24.de/) [http://www.swiss-code-red.com/](http://www.swiss-code-red.com/) (Noch kein Shop sondern eher eine Image-Seite, aber implementiert mit Gambio GX, da es mal ein Shop werden soll) [http://www.mxstuff.net/](http://www.mxstuff.net/) [http://beckpc.ch/game/index.php](http://beckpc.ch/game/index.php) [http://beckpc.ch/soho/index.php](http://beckpc.ch/soho/index.php) (Die letzten beiden Shops haben einen sehr umfangreichen Systemkonfigurator…) Und ab 2011 können dann auch Shopware-Templates von powertemplate so individuell aussehen… 🕶

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 09:59 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/3 "2010-11-17T09:59:51Z")

</div>

Wie ich gerade erfahre, haben wir unseren ersten Shopware-Design-Auftrag erhalten… Passt terminlich sehr gut, weil das erst Anfang 2011 losgehen soll… Wird was ganz besonderes: ein edler Designermoden-Shop mit allem Schnick und Schnack… Mit dem Kunden arbeiten wir schon seit Jahren sehr gut mit mehreren Shops auf xtCommerce-Basis zusammen. Jetzt war er aber von dem Shopware-Produkt so sehr angetan, dass er den neuen Shop damit machen, und in modernere Zeiten aufbrechen will… Ein paar Plugins braucht er da auch noch (Konfigurator, Newsletter und so). Wird sicher spannend…

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [17. November 2010 um 10:01 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/4 "2010-11-17T10:01:27Z")

</div>

Moin! Glückwunsch, das freut mich sehr. :thumbup:

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 10:09 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/5 "2010-11-17T10:09:12Z")

</div>

[quote=“Stefan Hamann”]Moin! Glückwunsch, das freut mich sehr. :thumbup:[/quote] Uns auch… Da Du gerade hier bist… [quote]Derzeit mache ich das in “engine/Shopware/Plugins/Default/Core/ControllerBase/Bootstrap.php”, wo ich folgenden Code eingefügt habe, der dann eine ganze Reihe von Template-Initialisierungen durchführt, und meine “Boxen” im “View” speichert. //Avenger //Do the template magic! $aTemplateDirs=Shopware()-\>Template()-\>getTemplateDir(); define(‘INC\_PATH’,$aTemplateDirs[1].‘frontend/\_pt\_inc/’); include(INC\_PATH.‘pt\_setup.inc.php’); //Avenger [/quote] “engine/Shopware/Plugins/Default/Core/ControllerBase/Bootstrap.php” ist sicher nicht der beste Platz, um sich einzuklinken… Wo würde man sich denn, systematisch korrekt, besser einklinken?

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [17. November 2010 um 10:14 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/6 "2010-11-17T10:14:15Z")

</div>

Das soll einfach bei jedem Controller aktiv werden, oder? Dann kannst du dich am besten in ` $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); ` einklinken! Im Listener kannst du per ` public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); } ` auf den View!

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 10:17 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/7 "2010-11-17T10:17:17Z")

</div>

[quote=„Stefan Hamann“]Das soll einfach bei jedem Controller aktiv werden, oder? Dann kannst du dich am besten in ` $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); ` einklinken! Im Listener kannst du per ` public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); } ` auf den View![/quote] In welchem Modul? Einem eigenen Plugin?

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [17. November 2010 um 10:24 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/8 "2010-11-17T10:24:09Z")

</div>

Ja, entweder neues Plugin & Integration in irgendein Plugin, was deinerseits evtl. bereits angelegt worden ist. Also einfach unter Shopware\Plugins\Frontend ein neues Plugin Powertemplate & dann `<?php class Shopware_Plugins_Frontend_Powertemplate_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{
$event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); // Dein Code } } ` Wenn du die Ausgabe auf z.B. einen Controller beschränken möchtest, kannst du nach folgendem Schema Events definieren. Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Register Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing Also man kann diese Art von Event bis runter auf eine einzelne Controller-Action definieren

---

<div class="post-metadata">

### Author: ![Stefan\_Hamann](https://avatars.discourse-cdn.com/v4/letter/s/5e9695/32.png) [@Stefan\_Hamann](https://forum.shopware.com/u/Stefan_Hamann)
#### Post date: [17. November 2010 um 10:25 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/9 "2010-11-17T10:25:10Z")

</div>

P.s. getSubject() liefert das Ursprungsobjekt, in diesem Fall also z.B. den aktuellen Controller - von da aus, kannst du dann auf alle anderen Shopware-Objekte!

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 10:30 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/10 "2010-11-17T10:30:27Z")

</div>

[quote=“Stefan Hamann”]Ja, entweder neues Plugin & Integration in irgendein Plugin, was deinerseits evtl. bereits angelegt worden ist. Also einfach unter Shopware\Plugins\Frontend ein neues Plugin Powertemplate & dann `<?php class Shopware_Plugins_Frontend_Powertemplate_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{
$event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); // Dein Code } } ` Wenn du die Ausgabe auf z.B. einen Controller beschränken möchtest, kannst du nach folgendem Schema Events definieren. Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Register Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing Also man kann diese Art von Event bis runter auf eine einzelne Controller-Action definieren[/quote] Das ist doch (wieder) mal ein Super-Service, danke! :thumbup:

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 11:23 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/11 "2010-11-17T11:23:04Z")

</div>

[quote=“avenger”][quote=“Stefan Hamann”]Ja, entweder neues Plugin & Integration in irgendein Plugin, was deinerseits evtl. bereits angelegt worden ist. Also einfach unter Shopware\Plugins\Frontend ein neues Plugin Powertemplate & dann `<?php class Shopware_Plugins_Frontend_Powertemplate_Bootstrap extends Shopware_Components_Plugin_Bootstrap
{
public function install()
{
$event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); // Dein Code } } ` Wenn du die Ausgabe auf z.B. einen Controller beschränken möchtest, kannst du nach folgendem Schema Events definieren. Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Detail Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Register Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Listing Also man kann diese Art von Event bis runter auf eine einzelne Controller-Action definieren[/quote] Das ist doch (wieder) mal ein Super-Service, danke! :thumbup:[/quote] So, das Plugin habe ich erstellt und registriert, und es wir auch schön aktiviert… Es gibt jetzt nur das Problem, dass zum Zeitpunkt der Plugin-Aktivierung View-Daten, die in “Shopware\_Plugins\_Core\_ControllerBase\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap” erstellt werden, noch nicht vorhanden sind… (Da ich mich bisher in “Shopware\_Plugins\_Core\_ControllerBase\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap” direkt “hart” eingeklinkt hatte, waren die Informationen vorhanden.) Frage: wie kann ich denn erreichen, dass mein neues Plugin “Shopware\_Plugins\_Local\_Frontend\_Powertemplate\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap” erst nach “Shopware\_Plugins\_Core\_ControllerBase\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap” aktiviert wird? [color=#FF0000]Das Plugin-System ist echt geil… :thumbup: [/color]

---

<div class="post-metadata">

### Author: ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)
#### Post date: [17. November 2010 um 11:32 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/12 "2010-11-17T11:32:08Z")

</div>

Hi avenger, das ist einfach. Als 3. Parameter, bei der Event-Registierung, kannst du die Ausführungsposition angeben. Dieser muss in diesem Fall zwischen 100 und 400 betragen, da der Event im ControllerBase-Plugin eine Ausführungsposition von 100 hat und im ViewRenderer eine eine Ausführungsposition von 400 hat. ` $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch', 'onPostDispatch', 101-399 ); $this-\>subscribeEvent($event);` Viele Grüße Heiner

---

<div class="post-metadata">

### Author: ![avenger](https://avatars.discourse-cdn.com/v4/letter/a/9de0a6/32.png) [@avenger](https://forum.shopware.com/u/avenger)
#### Post date: [17. November 2010 um 11:34 UTC](https://forum.shopware.com/t/shopware-ag-verstandnis-problem-smarty-objekte/705/13 "2010-11-17T11:34:41Z")

</div>

[quote=„avenger“]Frage: wie kann ich denn erreichen, dass mein neues Plugin „Shopware\_Plugins\_Local\_Frontend\_Powertemplate\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap“ erst nach „Shopware\_Plugins\_Core\_ControllerBase\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap“ aktiviert wird?[/quote] Frage selbst beantwortet: In Tabelle „s\_core\_subscribes“ muss der Eintrag des Plugins eine höhere "„position“ haben, als die anderen Plugins… (Ich hab das mal per SQL registriert, ist wirklich kein Problem…)
