comment trier les catégories telles qu'elles sont affichées dans admin?

15

Voici le 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();

S'il vous plaît des conseils, merci!

Aamir Siddique
la source

Réponses:

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
la source
Merci pour l'extrait, mais je veux m'en tenir à mon code car il est déjà appliqué dans le modèle. Comment pouvons-nous ajouter cet attribut de tri dans le $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? THX!
Aamir Siddique
3
Vous pouvez remplacer getChildren()par getChildrenCategories()et vous devriez les faire trier. Mais vous obtenez toujours les objets de catégorie et non les identifiants. Si vous avez besoin des identifiants, vous pouvez parcourir les catégories enfants et concaténer leurs identifiants. Je ne comprends pas vraiment ce que vous essayez de réaliser.
Marius
^^ J'aimerais qu'il soit plus clairement documenté quelque part qui getChildren()renvoie des identifiants non triés et getChildrenCategories()renvoie des objets triés. Cela a tout éclairci pour moi, les documents magento eux-mêmes ne le disent pas clairement.
waffl
à peu près sûr que getChildrenCategories ne fonctionne pas avec les catégories plates
Samyer
7

Vous pouvez essayer de changer votre code pour utiliser un joli mélange de getChilderCategories () et de la fonction toArray.

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

La fonction getChildrenCategories vous donnera une collection dans le même ordre que la section admin, puis en appelant toArray et en ne demandant que l'attribut droit_id, vous aurez un tableau d'ID de catégorie

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
la source