Wie sortiere ich Kategorien so, wie sie im Admin angezeigt werden?

15

Hier ist der Code:

$category = Mage::getModel('catalog/category')->load(3);
$subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();
$subCatIds = explode(',',$subCats);
$currentUrl = Mage::helper('core/url')->getCurrentUrl();

Bitte um Rat, danke!

Aamir Siddique
quelle

Antworten:

24
$category = Mage::getModel('catalog/category')->load(3);
$children = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
$children->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', $category->getId())
        ->addAttributeToFilter('is_active', 1)//get only active categories if you want
        ->addAttributeToSort('position');//sort by position

foreach ($children as $child){
    //do something with $child
}
Marius
quelle
Vielen Dank für das Snippet, aber ich möchte meinen Code beibehalten, da er bereits in der Vorlage angewendet wird. Wie können wir dieses Sortierattribut in das hinzufügen $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? Danke!
Aamir Siddique
3
Sie können ersetzen getChildren()mit getChildrenCategories()und Sie sollten sie sortiert haben. Trotzdem erhalten Sie die Kategorieobjekte und nicht die IDs. Wenn Sie die IDs benötigen, können Sie die untergeordneten Kategorien durchlaufen und ihre IDs verketten. Ich verstehe nicht wirklich, was Sie erreichen wollen.
Marius
^^ Ich wünschte, es wäre irgendwo klarer dokumentiert, dass getChildren()unsortierte IDs und getChildrenCategories()sortierte Objekte zurückgegeben werden. Dies hat alles für mich geklärt , die Magento-Dokumentation selbst macht dies ab sofort nicht klar.
Waffel
Ziemlich sicher, dass getChildrenCategories nicht mit Flat Categories
funktioniert
7

Sie können versuchen, Ihren Code zu ändern, um eine schöne Mischung aus getChilderCategories () und der Funktion toArray zu verwenden.

$category = Mage::getModel('catalog/category')->load(3);
$subCats = $category->getChildrenCategories();
$subCatIds = $subCats->toArray(array('entity_id'));

Mit der Funktion getChildrenCategories erhalten Sie eine Sammlung in der gleichen Reihenfolge wie im Admin-Bereich. Wenn Sie dann bei Array anrufen und nur nach dem Attribut rights_id fragen, erhalten Sie ein Array von Kategorie-IDs

array(3) {
    [10]=> array(1) {
         ["entity_id"]=> string(2) "10"
    }
    [13]=> array(1) {
        ["entity_id"]=> string(2) "13"
    }
    [18]=> array(1) {
        ["entity_id"]=> string(2) "18"
    }
}
David Manners
quelle