Magento – Subcategory / Unterkategorien Bilder anzeigen lassen

Wir hatten gerade das Problem, dass bei einer Magento Installation (Magento 1.6) die Thumbnails bzw. Kategoriebilder der Unterkategorien nicht angezeigt wurden, wenn man in die Hauptkategorie ging.

Standardmäßig zeigt Magento ja alle Artikel an, die in der Kategorie sind. Soll nun aber in der Hauptkategorie eine Bild-Übersicht über alle Unterkategorien angezeigt werden, kann dies mit folgender Anleitung (Vielen Dank u.a. an Charford) gemacht werden:

1. Man legt einen Statischen Block im Shop Backend mit folgenden Parametern an:

Blocktitel: Sub Category Listing
Seitenbezeichner: subcategory_listing
StoreView: Eben alle bei denen es verwendet wird
Status: Aktiviert
Inhalt (Hier am besten den WYSIWYG Editor ausschalten):

{{block type="catalog/navigation" template="catalog/navigation/subcategory_listing.phtml"}}

2. Zu der entsprechenden Kategorie gehen und folgende Einstellungen bei “Anzeige Einstellungen” machen:

Display Mode: Nur statischen Block
CMS Block: Sub Category Listing
Is Anchor: Nein

3. Eine Datei mit dem Namen “subcategory_listing.phtmlerstellen und in folgenden Ordner ablegen
app/design/frontend/[base oder default]/[IhrTemplate]/template/catalog/navigation/
die Datei soll folgenden Code enthalten:

<?php $_categories=$this->getCurrentChildCategories(); ?>
<br>

<div class="category-products">
<?php $_collectionSize = $_categories->count() ?>
<table class="products-grid" id="products-grid-table">
<?php $i=0; foreach ($_categories as $_category): ?>
<?php if ($i++%3==0): ?>
<tr>
<?php endif ?>
<td>
<a href="<?php echo $_category->getURL() ?>" title="<?php echo $this->htmlEscape($_category->getName()) ?>">
<img src="<?php echo $_category->getImageUrl() ?>" width="180" alt="<?php echo $this->htmlEscape($_category->getName()) ?>" />
</a>
<h3 class="product-name"><a href="<?php echo $_category->getURL() ?>" title="<?php echo $this->htmlEscape($_category->getName()) ?>">
<?php echo $this->htmlEscape($_category->getName()) ?></a></h3>
</td>
<?php if ($i%3==0 && $i!=$_collectionSize): ?>
</tr>
<?php endif ?>
<?php endforeach ?>
<?php for($i;$i%3!=0;$i++): ?>
<td class="empty">&nbsp;</td>
<?php endfor ?>
<?php if ($i%3==0): ?>
</tr>
<?php endif ?>
</table>
</div>
<br>

4. Folgende Datei kopieren

app\code\core\Mage\Catalog\Block\Navigation.php

und in diesen Ordner ablegen (wenn nicht vorhanden, erstellen)

app\code\local\Mage\Catalog\Block\

Dann die Kopie im zuletzt genannten Ordner öffnen und folgende Stelle suchen (ca. Zeile 125)

public function getCurrentChildCategories()
{
$layer = Mage::getSingleton('catalog/layer');
$category = $layer->getCurrentCategory();
/* @var $category Mage_Catalog_Model_Category */
$categories = $category->getChildrenCategories();
$productCollection = Mage::getResourceModel('catalog/product_collection');
$layer->prepareProductCollection($productCollection);
$productCollection->addCountToCategories($categories);
return $categories;
}

Diesen Bereich mit diesem Code ersetzen:

public function getCurrentChildCategories()
{
$layer = Mage::getSingleton('catalog/layer');
$category = $layer->getCurrentCategory();
/* @var $category Mage_Catalog_Model_Category */
$collection = Mage::getModel('catalog/category')->getCollection();
/* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */
$collection->addAttributeToSelect('url_key')
->addAttributeToSelect('name')
->addAttributeToSelect('is_anchor')
->addAttributeToSelect('image')
->addAttributeToFilter('is_active', 1)
->addIdFilter($category->getChildren())
->setOrder('position', 'ASC')
->joinUrlRewrite()
->load();

$productCollection = Mage::getResourceModel('catalog/product_collection');
$layer->prepareProductCollection($productCollection);
$productCollection->addCountToCategories($collection);
return $collection;
}

Sollte es anschließend zu einem Fatal Error hervorgerufen durch die Navigation.php kommen, der sich auf “->joinUrlRewrite()” bezieht, dann diese Zeile durch

->addUrlRewriteToResult()

ersetzen.

5. Abschließend die CSS Datei anpassen, um alles schön und gut aussehen zu lassen.

6. Noch etwas: Standardmäßig wird dann zusätzlich das Kategoriebild in der jeweiligen Kategorie nochmal angezeigt. Soll dem nicht so sein, in der view.phtml im Ordner /app/design/frontend/[base oder default]/[IhrTemplate]/template/catalog/category ca. in Zeile 52 den Bereich

<?php if($_imgUrl): ?>
<?php echo $_imgHtml ?>
<?php endif; ?>

löschen oder auskommentieren.

Was nun natürlich Voraussetzung für die Anzeige von Kategoriebildern ist, dass diese auch in den Kategorien hinterlegt sind. Diese können direkt im Backend bei der Kategorie hochgeladen werden.
Soll die Größe der Bilder angepasst werden, in der subcategory_listing.phtml die gewünschte Größe einstellen bzw. anpassen.

Sollte es nun immernoch nicht klappen, im Zweifelsfall unter “Eigene Gestaltung” bei der Kategorie noch das gewünschte Template auswählen.

Genutzt in Magento Version 1.6.2.0. Kommentare, Anregungen, Fragen? Gerne!

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

11 comments on “Magento – Subcategory / Unterkategorien Bilder anzeigen lassen”

  1. Hallo,

    leicht verständliche Anleitung vielen Dank aber mir zeigt es dann immer:

    Fatal error: Call to a member function getCurrentCategory() on a non-object in /home/.sites/137/site890/web/shop/app/code/local/Mage/Catalog/Block/Navigation.php on line 128

    wo liegt der Fehler?

    mfg
    Christian

    1. Ja, danke für die Anleitung. Ich habe aber das selbe Problem wie mein “Vorredner”. Die selbe Fehlermeldung. Gibt es da eine Lösung?
      Tibor

  2. Hi,
    hatte das gleiche Problem, checkt mal die einfachen Tüddelchen im Code, ich musste diese neu setzen, zB aus
    $layer = Mage::getSingleton(‘catalog/layer’);
    wurde
    $layer = Mage::getSingleton(‘catalog/layer’);

    usw.. das gleiche im Schritt 1 bei
    {{block type=”catalog/navigation” template=”catalog/navigation/subcategory_listing.phtml”}}

    evtl liegts an der Schriftart hier im Blog, auch die doppelten Anführungszeichen musste ich neu setzen.

    1. Danke für den Hinweis, ich muss mich Stück für Stück durch die alten Beiträge arbeiten und den Code in entsprechende Klammern setzen, die ich damals noch nicht hatte. Nun habe ich es bei diesem Artikel aber auch mal gemacht.

  3. Hallo,
    Alles geklappt! Danke für die Anleitung. Bekommt man auch die Beschreibung der Unterkategorie zu jeden Bild rein? Categoryname geht ja auch..

  4. Hallo,

    Super Anleitung! DANKE!!!

    Wie kann man folgendes ändern:
    – Text unter dem Bild zentrieren
    – Bilder/Kategorien pro Reihe bestimmen
    – Abstand der Bilder festlegen

    1. Zum größten Teil über das CSS. Bzgl. der Bilder pro Reihe einfach mal hier im Blog suchen, da gibt es eine Anleitung.

  5. Leider werden bei mir nur die für die Hauptkategorie hinterlegten Bilder angezeigt, sprich ich klicke auf die Hauptkategorie und bekomme dann das Bild der Hauptkategorie angezeigt und nicht etwa die der weiteren Unterkategorien.
    Woran könnte das liegen?

Leave a Reply

Your email address will not be published. Required fields are marked *