Beliebige Kategorie auf der Magento Startseite anzeigen

Im Magento Shopsystem fehlt leider die Möglichkeit, eine beliebige Kategorie und ihre Produkte auf der Startseite anzuzeigen. In diesem Artikel geht es darum, wie Sie möglichst elegant eine beliebige Kategorie auf die Startseite Ihres Magento Shops bringen können.


## XML Layout Updates
Es ist sinnvoll, die angestrebten Änderungen entweder in den XML-Layoutdateien oder über die Layout-Updates der einzelnen Content-Blöcke und Seiten zu realisieren. Für die Startseite ist der Eintrag unter „CMS -> Seiten verwalten -> Home Page“ zu finden. Das ist die Startseite, die bei einem Aufruf des Shops ohne jegliche Parameter angezeigt wird.

Da die XML-Layoutdateien auch Änderungen durch Updates unterworfen sein können, ist die Änderung über die Layout-Updates der Content-Seite zu bevorzugen. Da das CMS-Modul normalerweise keine Kategorie-Navigation anzeigt, müssen wir diese händisch einfügen. Das passende XML-Markup findet man in der „catalog.xml“:



Diesen XML-Block fügt man einfach unter „Eigene Gestaltung“ bei der Home Page mit ein. Nach einem Reload der Startseite sieht man – nichts. Ist ja auch logisch, da es beim Aufruf der Startseite keine aktive Kategorie gibt, für die es sich lohnen würde eine Navigation anzuzeigen.

## Ohne Core-Hacking geht es nicht
Eine aktive Kategorie zu setzen funktioniert leider nicht über XML (oder ich weiß nicht wie), also müssen wir das im Core erledigen. Die für das CMS-Modul zuständigen Controller finden sich unter app/code/core/Mage/Cms/controllers. Uns interessiert der IndexController, da er die passenden Seiten anzeigt die aufgerufen werden. Die erste Funktion indexAction ist die, die für die Anzeige der Home Page zuständig ist. Bevor diese also gerendert wird, laden und registrieren wir eine beliebige Kategorie:


    public function indexAction($coreRoute = null)
    {
        // [start]  exanto.de - set default category
        $default_category = Mage::getModel('catalog/category')
        ->setStoreId(Mage::app()->getStore()->getId())
        ->load(3);
        Mage::register('current_category', $default_category);
        // [end]    exanto.de - set default category
    	$pageId = Mage::getStoreConfig('web/default/cms_home_page');
        if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
            $this->_forward('defaultIndex');
        }
    }

Wichtig sind die Angabe der ID der gewünschten Kategorie (->load(ID)). Die ID einer Kategorie erfahren Sie am schnellsten, wenn Sie im Adminbereich unter Katalog -> Kategorien verwalten eine Kategorie editieren. Die ID steht dann in der Überschrift neben dem Namen der Kategorie.

Nach dem Speichern und Neuladen der Seite sehen Sie bereits, daß die Kategorie als aktiv angezeigt wird und auch die passende Navigation auf der linken Seite eingeblendet wird. Fehlen nur noch die passenden Produkte.

## Produktliste anzeigen
Beliebige Produktlisten anzuzeigen ist erstaunlich einfach. Sie können den passenden Block in den Inhaltsbereich der CMS-Seite einfügen:


{{block type="catalog/product_list" category_id="3" template="catalog/product/list.phtml"}} 

Die Angabe der category_id ist dabei optional, da wir ja eine eigene aktive Kategorie im Controller des CMS-Moduls gesetzt haben. Wenn Sie aber die Produkte einer anderen Kategorie (z.B. spezielle Produkte für die Startseite) anzeigen wollen, dann können Sie hier eine beliebige Kategorie-ID eintragen und damit deren Produkte auf der Startseite anzeigen.

## Fazit
Ich hoffe dieses kleine Tutorial hat Ihnen gefallen. Ich habe mich relativ lange durch das Magento Forum gewühlt, bis ich schließlich auf meine eigene Lösung gekommen bin. Schade, daß sich das Gleiche nicht per XML realisieren lässt, da eine Änderung am Magento Core immer einige Probleme aufwirft.

Zum einen wird die Änderung bei einem Update des Shopsystems zerstört, oder es kommt (wenn man die Datei auslagert in den Community-Bereich) zu eventuellen Fehlern weil Updates am indexController im Community-Bereich vom System nicht durchgeführt werden.

6 Kommentare

  1. Hi,

    ich stimme dir nicht zu, dass die Änderungen in app/code/core/Mage/Cms/controllers gemacht werden müssen.

    Sinnvoller, und so ist es auch angedacht, ist es die Änderung so zu machen, dass man die bearbeitete Version neu unter app/code/LOCAL/Mage/Cms/controllers speichert.

    Gruß Kevin

    1. Hi Kevin,

      stimmt, im /local Ordner ist es besser. Allerdings besteht auch dort das Problem, daß diese Datei manuell aktualisiert werden muß, wenn der Core ein Update erfährt. Besser ist wohl das Überschreiben der Methode in einem eigenen Modul, was aber eine Menge mehr Aufwand bedeutet. Danke für den Hinweis, das Tutorial stammt noch aus meiner Anfangszeit mit Magento 🙂

      Gruß,
      Ingo

  2. Bei multiplen Shops, für die aktuelle Kategorie ID: / If you use multiple shops,
    For the current ID use this: ->load(Mage::getSingleton(’catalog/layer’)->getCurrentCategory()->getId() );

    1. Hallo! Redirects haben bei Magento oft komische Nebenwirkungen. Zudem ist der Hack ja dazu da, die Startseite anzupassen, nicht um in eine Kategorie zu springen. Ich würde daher von Redirects abraten, und es lieber mit Magento Bordmitteln versuchen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert