Come menzionato da mhaupt, è più veloce caricare una raccolta piuttosto che ogni categoria in un ciclo. Ma, per quanto mi riguarda, non è necessario caricare manualmente le categorie figlio. Fondamentalmente questo è quello che già fa $category->getChildrenCategories()
.
C'è anche un filtro per ottenere solo le categorie attive. Basta chiamare lo addIsActiveFilter()
sulla raccolta.
a.) Carico attivo categorie bambino tramite 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.) Load-categorie attive con getChildrenCategories()
// 1. Load collection
$categoryCollection= $category->getChildrenCategories();
// 2. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();
La collezione saranno caricati modulo del database non appena a cui si accede. Se la raccolta non viene caricata e $subcategories->count()
viene chiamato solo un "SELECT count (*)" verrà generato contro il database (in contrasto con count($subcategories)
che costringerà la raccolta a caricarsi).
Iterando la raccolta
foreach($categoryCollection as $category) {
echo $category->getName();
}
Se si aggiungono altri filtri per la raccolta dopo l'accesso di esso, la collezione non caricarsi di nuovo automaticamente. Per applicare le modifiche alla raccolta, è sufficiente chiamare lo $categoryCollection->load()
per ricaricare la raccolta dal database.
fonte
2014-04-17 08:17:54
Grazie mille ora funziona. – Tonzkie
Usa getAllChildren e passa true ad esso, questo restituirà un array. Non c'è bisogno di esplodere la corda. Lyle Mcclanahan offre il miglior consiglio – Tisch
fantastico grazie! – zaw