Sitemap - Startseite

Hallo, kann ich über das Backend steuern, dass die Startseite auch in der Sitemap auftaucht? Ist ja eig. auch eine Kategorie. Oder muss ich dazu im Template rumpfuschen :wink: Danke

Niemand eine Idee? Muss ich das jetzt wirklich hardcoded in das Template schreiben?

Du könntest im Controller Sitemap.php das Array $result modifizieren - also bevor dort die Unterkategorien eingefügt werden, einen Datensatz mit den Werten der Startseite eintragen. Also einfach einen Post-Dispatch Event auf den Sitemap Controller setzen, dort mit $args->getSubject()->View(); den view holen und diesen dann wie folgt modifizieren. $view = $args-\>getSubject()-\>View(); $link = $args-\>getSubject()-\>Front()-\>Router()-\>assemble(array( 'sViewport'=\>'listing', 'sCategory'=\>3 )); $view-\>sCategoryTree = array("link"=\>$link,"name"=\>"Startseite","sub"=\>$view-\>sCategoryTree); Kannst du einfach in deinem bestehenden Plugin mit integrieren (Danach einmal de- und neu installieren!)

Hört sich soweit gut an. Habe aber noch etwas Verständisprobleme. > Also einfach einen Post-Dispatch Event auf den Sitemap Controller setzen Wie mache ich das? Enlight_Controller_SITEMAP_PostDispatch ? [code]<?php class Shopware_Plugins_Frontend_Test_Bootstrap extends Shopware_Components_Plugin_Bootstrap

{

public function install()

{		

	$event = $this->createEvent( 'Enlight\_Controller\_Sitemap\_PostDispatch', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $link = $args-\>getSubject()-\>Front()-\>Router()-\>assemble(array( 'sViewport'=\>'listing', 'sCategory'=\>3 )); $view-\>sCategoryTree = array("link"=\>$link,"name"=\>"Startseite","sub"=\>$view-\>sCategoryTre } }[/code]

Enlight_Controller_Action_PostDispatch_Sitemap

[quote=„Stefan Hamann“]Enlight_Controller_Action_PostDispatch_Sitemap[/quote] danke. und der rest meines Codes würde dann stimmen? Woher kommt der Link?

Welcher Link? Der Link wird doch oben mit assemble generiert? Das ist ungetestet, sollte aber funktionieren!

mhhh, irgendwas passt da nicht. Sobald sich das Plugin unter /Community/Frontend/SitemapStartseite/Bootstrap.php befindet funktioniert das Pluginmodul in den Einstellungen nicht mehr und ich sehe Links im Fenstern keine Auflistung/Ordnerstruktur. Lösche ich das Plugin wieder vom FTP, so sehe ich die Struktur wieder. Kann das sein? Bootstrap.php Inhalt: <?php class Shopware_Plugins_Frontend_SitemapStartseite_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Sitemap', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $link = $args-\>getSubject()-\>Front()-\>Router()-\>assemble(array( 'sViewport'=\>'listing', 'sCategory'=\>3 )); $view-\>sCategoryTree = array("link"=\>$link,"name"=\>"Startseite","sub"=\>$view-\>sCategoryTre } }

Syntax-Fehler: $view->sCategoryTree = array(“link”=>$link,“name”=>“Startseite”,“sub”=>$view->sCategoryTre Da hast du nicht vollständig kopiert :wink: Richtig wäre: $view->sCategoryTree = array(“link”=>$link,“name”=>“Startseite”,“sub”=>$view->sCategoryTree);

okay danke. Jetzt spinnt das Plugin-Modul nicht mehr :wink: Leider funktioniert das Plugin aber nicht. Ich habe nun “Startseite” mal in “Über mich” umbenannt, da die erste Seite so heißt. Aber auch ohne Erfolg. Hast du noch eine Idee? [code]<?php class Shopware_Plugins_Frontend_SitemapStartseite_Bootstrap extends Shopware_Components_Plugin_Bootstrap

{

public function install()

{		

	$event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Sitemap', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $view = $args-\>getSubject()-\>View(); $link = $args-\>getSubject()-\>Front()-\>Router()-\>assemble(array( 'sViewport'=\>'listing', 'sCategory'=\>3 )); $view-\>sCategoryTree = array("link"=\>$link,"name"=\>"Über mich","sub"=\>$view-\>sCategoryTree); } } [/code]

Okay, so funktioniert es - <?php class Shopware_Plugins_Frontend_SitemapStartseite_Bootstrap extends Shopware_Components_Plugin_Bootstrap { public function install() { $event = $this->createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Sitemap', 'onPostDispatch' ); $this-\>subscribeEvent($event); return true; } public static function onPostDispatch(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); $response = $args-\>getSubject()-\>Response(); $view = $args-\>getSubject()-\>View(); if(!$request-\>isDispatched()||$response-\>isException()||$request-\>getModuleName()!='frontend'){ return; } $link = $args-\>getSubject()-\>Front()-\>Router()-\>assemble(array( 'sViewport'=\>'index' )); $sub = $view-\>sCategoryTree; $category = array\_merge(array(array("link"=\>$link,"name"=\>"Startseite","sub"=\>array())),$sub); $view-\>sCategoryTree = $category; } }

Danke, nun funktioniert es wunderbar. Nun noch ein theoretischer Wunsch. Jetzt wird die Startseite verlinkt mit dem Wort, welches im Code hinterlegt ist. Okay… Ich könnte bei den Plugin-Einstellungen ein Feld machen, wo man den Namen eingibt. Das wäre auch okay… Aber am optimalsten sollte der Name aus der Start-Kategorie geholt werden. Das sollte doch auch möglich sein, oder?

 $name = Shopware()-\>Db()-\>fetchOne("SELECT description FROM s\_categories WHERE id = 3"); $category = array\_merge(array(array("link"=\>$link,"name"=\>$name,"sub"=\>array())),$sub); 
1 Like

Super, funktioniert Bestens. Falls jmd das Plugin benötigt => SitemapStartseite V1