Ich überschreibe eine Blockklasse Mage_Catalog_Block_Navigation
( Link zur Signatur ), um ein benutzerdefiniertes Menü zu erstellen, in dem nur Unterkategorien der aktuellen Kategorie angezeigt werden.
Innerhalb der Methode renderCategoriesMenuHtml
( Link zur Signatur ) Ich versuche, untergeordnete Kategorien der ausgewählten übergeordneten Kategorie abzurufen. Also habe ich den Standardcode ersetzt:
foreach ($this->getStoreCategories() as $child) {
//...
}
mit den folgenden:
/**
* @param $parent ID of category from which we start
* @param $recursionLevel How many levels of subcategories retrieve
* getCategories(...) is a method from model Mage_Catalog_Model_Category
*/
$category = Mage::getModel('catalog/category');
$storeCategories = $category->getCategories($parent, $recursionLevel);
foreach ($storeCategories as $child) {
//...
}
Dieser Code funktioniert einwandfrei und gibt Unterkategorien des ausgewählten übergeordneten Elements zurück. Sobald ich jedoch die "flache Katalogkategorie" aktiviere $parent
, scheint die Variable vollständig ignoriert zu werden, und dieser Code gibt alle Kategorien der obersten Ebene anstelle von Unterkategorien der Kategorie mit ID zurück $parent
.
Was mache ich falsch? Sollte die getCategories
Methode nicht auch dann funktionieren, wenn flache Kategorien aktiviert sind?
BEARBEITEN:
Meine eigentliche Frage ist
- Warum
ignoriert die Methode
getCategories
des ModellsMage_Catalog_Model_Category
Parameter$parent
und$recursionLevel
wenn flache Kategorien aktiviert sind? (siehe Quelle der Methode unten) - Gibt es mehr Methoden, die mit Flat Catalog anders funktionieren? Wie kann ich sie erkennen, um Probleme in Zukunft zu vermeiden?
Ich nenne es so in der Methode renderCategoriesMenuHtml
:
$parent = 13;
$recursionLevel = 2;
$category = Mage::getModel('catalog/category');
$storeCategories = $category->getCategories($parent, $recursionLevel);
Bei nicht flachen Kategorien gibt dieser Code Unterkategorien (2 Ebenen wie in angegeben $recursionLevel
) der Kategorie mit der ID 13 zurück. Bei aktivierten flachen Kategorien erhalte ich jedoch alle Kategorien der obersten Ebene mit allen Unterkategorien (begrenzt durch den Wert der Administratoreinstellungen 'catalog/navigation/max_depth'
, nicht durch $recursionLevel
).
Methode im Modell Mage_Catalog_Model_Category
:
public function getCategories($parent, $recursionLevel = 0, $sorted=false, $asCollection=false, $toLoad=true)
{
$categories = $this->getResource()
->getCategories($parent, $recursionLevel, $sorted, $asCollection, $toLoad);
return $categories;
}
ruft Methode im Ressourcenmodell auf Mage_Catalog_Model_Resource_Category
:
public function getCategories($parent, $recursionLevel = 0, $sorted = false, $asCollection = false, $toLoad = true)
{
$tree = Mage::getResourceModel('catalog/category_tree');
/* @var $tree Mage_Catalog_Model_Resource_Category_Tree */
$nodes = $tree->loadNode($parent)
->loadChildren($recursionLevel)
->getChildren();
$tree->addCollectionData(null, $sorted, $parent, $toLoad, true);
if ($asCollection) {
return $tree->getCollection();
}
return $nodes;
}