magento_logo

Leere Kategorien in Navigation

Wir mussten gerade feststellen, dass die Methode getProductCount des Kategorie Models nicht so arbeitet, wie man es von ihr erwartet.

Kurze Problembeschreibung:
Unser Problem bestand darin, dass in der Navigation Kategorien aufgetaucht sind, welche eigentlich keine Produkte enthalten. Es waren z.B. 2 Produkte der Kategorie zugewiesen, aber deaktiviert. Der ProductCount gab trotzdem eine Anzahl von 7 Produkten zurück.

Nach kurzer Analyse mussten wir feststellen, dass Produkte, welche in der gleichen Kategorie, aber in einem anderen Store waren, auch mitgezählt wurden. Ein kurzer Blick auf den Query von Magento hat dann auch schon gereicht, um festzustellen, dass weder die Stores noch die Verfügbarkeit der Produkte eine Rolle spielen.

Wir haben den Query um eine Filterung des aktuellen Stores und um eine Prüfung der Verfügbarkeit der Produkte erweitert. Das wollen wir euch natürlich nicht vorenthalten.

Ihr müsst folgendes Resource Model überschreiben: Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat

Und hier unsere getProductCount Methode:

public function getProductCount($category)
{
 $productEntityIntTable = (string)Mage::getConfig()->getTablePrefix() . 'catalog_product_entity_int';
  
 $select =  $this->_getReadAdapter()->select()
  ->from(array('p' => $this->getTable('catalog/category_product')), "COUNT(p.product_id)")
  ->joinLeft(array('w' => $this->getTable('catalog/product_website')),'p.product_id = w.product_id')
  ->joinLeft(array('ci' => $this->getTable('cataloginventory/stock_status')),'ci.product_id = p.product_id AND ci.website_id = w.website_id')
  ->joinLeft(array('cpi' => $productEntityIntTable),'cpi.entity_id = p.product_id')
  ->where("p.category_id = ?", $category->getId())
  ->where("w.website_id = ?", Mage::app()->getStore()->getWebsiteId())
  ->where("ci.stock_status = 1")
  ->where("cpi.attribute_id = 84")
  ->where("cpi.value = 1")
  ->group("p.category_id");
   
  return (int) $this->_getReadAdapter()->fetchOne($select);
}

Die „attribute_id“ muss noch durch eure ersetzt werden. Es handelt sich hierbei um das „status“ Attribut der Produkte mit dem Backend Type „catalog/product_status“.

Hinterlasse einen Kommentar

4 Kommentare auf "Leere Kategorien in Navigation"

Benachrichtige mich zu:
avatar

Sortiert nach:   neuste | älteste | beste Bewertung
Vinai
Gast
6 Jahre 11 Monate her

Super! Willst du nicht einen patch commiten?
LG. Vinai

mh
Gast
mh
6 Jahre 9 Monate her

Ich stehe hier total im Wald. Gibt es irgendwo eine gute Anleitung, wie man ein Resource Model überschreibt? Ich habe jetzt schon einige Tutorials durch, aber diese Methode zu überschreiben will einfach nicht funktionieren..

Oder könntest du evtl. die entsprechenden Dateien bereitstellen?

Nicolai Essig
Gast
6 Jahre 9 Monate her

Das überschreiben eines Resource Models funktioniert genauso, wie bei einem normalen, nur das der Namespace meist „resource“ oder „mysql4“ noch beinhaltet.

Hier das XML um das oben genannte Resource Model zu überschreiben.

http://pastebin.com/6PAd6UD1

André Herrn
Gast
6 Jahre 6 Monate her

Hat bei mir gut funktioniert, danke.

Ich habe den Stock-Part rausgelassen, da in unserem Shop auch Produkte angezeigt werden, die Out of Stock sind.

wpDiscuz
Weitere Beiträge zum Thema
Flagbit Magento Modul ist aktueller Magento Staff Pick
Patch für CustomerController / Magento 1.4.0.1
Magento Enterprise Edition 1.13
Feed Reader in neuer Version