Wie von mhaupt erwähnt, ist es schneller, eine Sammlung als jede Kategorie in einer Schleife zu laden. Soweit es mich betrifft, müssen die Unterkategorien nicht manuell geladen werden. Im Prinzip ist dies bereits $category->getChildrenCategories()
.
Es gibt auch einen Filter, um nur aktive Kategorien zu erhalten. Rufen Sie einfach addIsActiveFilter()
auf der Sammlung an.
a.) Last aktive Kind Kategorien über getChildren()
// 1. Get a list of all child category ids (e.g "12,23,11,42")
$subcategoryIds = $category->getChildren();
// 2. Create collection
$categoryCollection = Mage::getModel('catalog/category')->getCollection();
// 3. Add all attributes to select, otherwise you can not
// access things like $cat->getName() etc.
$categoryCollection->addAttributeToSelect('*');
// 4. Filter by ids
$categoryCollection->addIdFilter($subcategoryIds);
// 5. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();
b.) Belastung aktive Kind Kategorien mit getChildrenCategories()
// 1. Load collection
$categoryCollection= $category->getChildrenCategories();
// 2. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();
Die Kollektion wird Form, sobald die Datenbank geladen werden wie es zugegriffen wird. Wenn die Sammlung nicht geladen wird und $subcategories->count()
aufgerufen wird, wird nur ein "SELECT count (*)" gegen die Datenbank ausgelöst (im Gegensatz zu count($subcategories)
, wodurch die Sammlung zum Laden gezwungen wird).
Iterieren die Sammlung
foreach($categoryCollection as $category) {
echo $category->getName();
}
Wenn Sie mehrere Filter zur Sammlung hinzuzufügen, nachdem es den Zugriff auf die Sammlung wird sich nicht wieder automatisch geladen. Um Änderungen an der Sammlung vorzunehmen, rufen Sie einfach $categoryCollection->load()
auf, um die Sammlung von der Datenbank neu zu laden.
Vielen Dank es funktioniert jetzt. – Tonzkie
Verwenden Sie getAllChildren und übergeben Sie true, um ein Array zurückzugeben. Keine Notwendigkeit, die Zeichenfolge zu explodieren. Lyle Mcclanahan bietet den besten Rat – Tisch
genial Danke! – zaw