Templatewechsel per Domainaufruf

Hallo, bei der 3er Shopwareversion war es möglich ein Template per Domainaufruf in Form von http://www.domain.de/shopware.php?sTpl= … ichnisname aufzurufen. Dies scheint in der 4er Version nicht mehr zu funktionieren. Gibt es dazu eine Lösung?? Gruß Andreas

Hallo, das ist korrekt. Das ist aus Sicherheitsgründen nicht mehr möglich. Du kannst aber folgendes Beispiel-Plugin dafür verwenden: Wenn du das eingebunden hast, kannst du wieder via ?sTpl=[template-name] das Theme dynamisch wechseln. <?php class Shopware_Plugins_Frontend_ThemeSwitcher_Bootstrap extends Shopware_Components_Plugin_Bootstrap { /** * Install plugin method * * @return bool */ public function install() { $this->subscribeEvent( 'Enlight\_Controller\_Front\_RouteStartup', 'onRouteStartup', 99 ); } public function onRouteStartup(Enlight\_Controller\_EventArgs $args) { $bootstrap = $this-\>Application()-\>Bootstrap(); if ($bootstrap-\>issetResource('Shop')) { $shop = $this-\>Application()-\>Shop(); $main = $shop-\>getMain(); if($main === null) { /\*\* @var $repository Shopware\Models\Shop\Repository \*/ $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Shop\Shop'); $main = $repository-\>getActiveById($shop-\>getId()); } // Template Model übergeben if (!empty($\_REQUEST["sTpl"])){ Shopware()-\>Session()-\>sTpl = $\_REQUEST["sTpl"]; } if (!empty(Shopware()-\>Session()-\>sTpl)){ $repository = 'Shopware\Models\Shop\Template'; $repository = Shopware()-\>Models()-\>getRepository($repository); $template = Shopware()-\>Session()-\>sTpl; $template = $repository-\>findOneBy(array('template' =\> $template)); if ($template !== null){ $shop-\>setTemplate($template); }else { $shop-\>setTemplate($main-\>getTemplate()); } }else { $shop-\>setTemplate($main-\>getTemplate()); } } } }

Hallo, Danke erstmal. Plugin kann installiert und aktiviert werden, aber scheinbar ist es doch nicht aktiv. Gibts noch Möglichkeiten? Gruß

Hey, das sollte so bereits korrekt funktionieren. Kannst du überprüfen, ob er überhaupt in die Methode onRouteStartup springt, wenn du den Shop aufrufst? Zum Testen kannst du einfach zu Anfang der Methode mal ein die(„TEST“); setzen. Wenn das korrekt funktioniert, kann es eigentlich nur noch sein, dass du ein Template ansprichst, was entweder nicht existiert, einen anderen Namen im Filesystem hat oder noch nicht in der Tabelle s_core_templates steht.

hhmmm Kannst du überprüfen, ob er überhaupt in die Methode onRouteStartup springt, wenn du den Shop aufrufst? Er springt nicht. Wenn das korrekt funktioniert, kann es eigentlich nur noch sein, dass du ein Template ansprichst, was entweder nicht existiert, einen anderen Namen im Filesystem hat alle da und mit richtigen Namen aufgerufen. oder noch nicht in der Tabelle s_core_templates steht. stehen in der Tabelle s_core_templates

Sorry, mein Fehler. Es fehlt ein return true; am Ende der install() Methode. Hier nochmal der korrekte Code - einfach ersetzen und dann erneut installieren / aktivieren. <?php class Shopware_Plugins_Frontend_ThemeSwitcher_Bootstrap extends Shopware_Components_Plugin_Bootstrap { /** * Install plugin method * * @return bool */ public function install() { $this->subscribeEvent( 'Enlight\_Controller\_Front\_RouteStartup', 'onRouteStartup', 99 ); return true; } public function onRouteStartup(Enlight\_Controller\_EventArgs $args) { $bootstrap = $this-\>Application()-\>Bootstrap(); if ($bootstrap-\>issetResource('Shop')) { $shop = $this-\>Application()-\>Shop(); $main = $shop-\>getMain(); if($main === null) { /\*\* @var $repository Shopware\Models\Shop\Repository \*/ $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Shop\Shop'); $main = $repository-\>getActiveById($shop-\>getId()); } // Template Model übergeben if (!empty($\_REQUEST["sTpl"])){ Shopware()-\>Session()-\>sTpl = $\_REQUEST["sTpl"]; } if (!empty(Shopware()-\>Session()-\>sTpl)){ $repository = 'Shopware\Models\Shop\Template'; $repository = Shopware()-\>Models()-\>getRepository($repository); $template = Shopware()-\>Session()-\>sTpl; $template = $repository-\>findOneBy(array('template' =\> $template)); if ($template !== null){ $shop-\>setTemplate($template); }else { $shop-\>setTemplate($main-\>getTemplate()); } }else { $shop-\>setTemplate($main-\>getTemplate()); } } } }

1 „Gefällt mir“

Perfekt Chef ! Klasse Support !!! Gruß Andreas

Hallo, habe das gerade auch versucht als Plugin zu installieren, aber nach dem Hochladen und aktualisieren kommt bei den Plugins immer folgende Fehlermeldung: [code]You’re trying to decode an invalid JSON String: Parse error: syntax error, unexpected ’

Hallo, auch bei mir kommt es zu einer Fehlermeldung. Könnte evtl. jemand das Plugin posten bei dem es funktioniert? Außer mir und taaucher würden sich bestimmt noch andere User darüber freuen… Danke!

Wird die Variable irgendwie validiert, oder sind daurch exploits möglich !?

Hallo Stefan, inwiefern besteht ein Konflikt mit den FrontendCache, wenn man so Templates verändert? Oder wird dabei das Template ausgewertet und fließt mit in den “Cache-Schlüssel” ein? Gruß, Michael

Hallo, haben das Plugin installiert, auf der Startseite klappt es auch super. Sobald man jedoch einen Link aufruft, springt das ganze Design wieder zurück? Wie kann ich den z.B. die AGB mit einem anderen Template aufrufen?

Hallo, Das Plugin funktioniert super - leider nur im Hauptshop. Was muss ich ändern, damit es auch im Subshop funktioniert. Danke

Habs hinbekommen. Als Position einfach die 101 nehmen da das Multishop Plugin die 100 verwendet.