Ich habe eine Landingpage in den neuen Einkaufswelten erstellt. In allen Subrubriken wird das zugehörige Banner brav an der richtigen Stelle dargestellt. Lediglich auf der Startseite kommt kein Banner. {include file="frontend/campaign/box.tpl" campaignsData=$campaigns.leftTop}
Das Array, was über „campaignsData“ an box.tpl übergeben wird ist auf der Startseite leer. Die zweite Frage in diesem Zusammenhang: Ich möchte im Footer eine Liste aller Landingpages anzeigen. Wie komme ich hier an eine Liste aller angelegten Landingpages?
Meistens findet man die Lösung schneller selber, als hier zu hoffen Wenn man die Variable campaigns auf der Startseite braucht, dann muss in der /engine/Shopware/Controllers/Frontend/Index.php der Abschnitt public function indexAction() { $category = Shopware()-\>Shop()-\>get('parentID'); $this-\>View()-\>sCategoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($category); if (Shopware()-\>Shop()-\>getTemplate()-\>getVersion() == 1) { $this-\>View()-\>sOffers = Shopware()-\>Modules()-\>Articles()-\>sGetPromotions($category); } $this-\>View()-\>sBanner = Shopware()-\>Modules()-\>Marketing()-\>sBanner($category); if ($this-\>Request()-\>getPathInfo() != '/') { $this-\>Response()-\>setHttpResponseCode(404); } }
ergänzt werden mit public function indexAction() { $category = Shopware()-\>Shop()-\>get('parentID'); $this-\>View()-\>sCategoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($category); if (Shopware()-\>Shop()-\>getTemplate()-\>getVersion() == 1) { $this-\>View()-\>sOffers = Shopware()-\>Modules()-\>Articles()-\>sGetPromotions($category); } $this-\>View()-\>sBanner = Shopware()-\>Modules()-\>Marketing()-\>sBanner($category); if ($this-\>Request()-\>getPathInfo() != '/') { $this-\>Response()-\>setHttpResponseCode(404); } $categoryId = $this-\>Request()-\>getParam('sCategory'); $categoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($categoryId); $categoryId = $categoryContent['id']; Shopware()-\>System()-\>\_GET['sCategory'] = $categoryId; $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Emotion\Emotion'); $query = $repository-\>getCampaignByCategoryQuery($categoryId); $campaignsResult = $query-\>getArrayResult(); $campaigns = array(); foreach ($campaignsResult as $campaign) { $campaign['categoryId'] = $categoryId; $campaigns[$campaign['landingPageBlock']][] = $campaign; } $this-\>View()-\>campaigns = $campaigns; }
Hi, das ist keine Gute Idee. Änderungen in den Shopware eigenen Ordner sind nicht zu empfehlen und auch nicht updatesicher. Ich habe jetzt inhaltlich nicht geschaut, aber wenn das der einzige Weg ist solltest du das in ein Plugin packen.
Dann also so: class Shopware\_Plugins\_Frontend\_HomeBanner\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap { public function install() { $this-\>subscribeEvents(); return true; } function subscribeEvents(){ $this-\>subscribeEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Index', 'onPostDispatch' ); } public function onPostDispatch(Enlight\_Event\_EventArgs $args) { $controller = $args-\>getSubject(); $response = $controller-\>Response(); $request = $controller-\>Request(); $view = $controller-\>View(); $categoryId = $view-\>getAssign('sCategory'); $categoryContent = Shopware()-\>Modules()-\>Categories()-\>sGetCategoryContent($categoryId); $categoryId = $categoryContent['id']; Shopware()-\>System()-\>\_GET['sCategory'] = $categoryId; $repository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Emotion\Emotion'); $query = $repository-\>getCampaignByCategoryQuery($categoryId); $campaignsResult = $query-\>getArrayResult(); $campaigns = array(); foreach ($campaignsResult as $campaign) { $campaign['categoryId'] = $categoryId; $campaigns[$campaign['landingPageBlock']][] = $campaign; } $view-\>campaigns = $campaigns; } }