como classificar categorias como são mostradas no admin?

15

Aqui está o código:

$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();

Por favor, conselhos, thx!

Aamir Siddique
fonte

Respostas:

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
fonte
Obrigado pelo snippet, mas quero manter meu código, pois ele já está aplicado no modelo. Como podemos adicionar esse atributo de classificação ao $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? valeu!
Aamir Siddique
3
Você pode substituir getChildren()por getChildrenCategories()e deve ordená-los. Mas ainda assim você obtém os objetos de categoria e não os IDs. Se você precisar dos IDs, poderá percorrer as categorias filho e concatenar seus IDs. Eu realmente não entendo o que você está tentando alcançar.
Marius
^^ Gostaria que fosse mais claramente documentado em algum lugar que getChildren()retorne IDs não classificados e getChildrenCategories()retornasse objetos classificados. Isso esclareceu tudo para mim, os documentos do magento a partir de agora não deixam isso claro.
waffl
tenho certeza que getChildrenCategories não funciona com Flat Categories
Samyer
7

Você pode tentar alterar seu código para usar uma boa mistura de getChilderCategories () e a função toArray.

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

A função getChildrenCategories fornecerá uma coleção na mesma ordem que a seção admin. Depois, chamando toArray e solicitando apenas o atributo entit_id, você terá uma variedade de IDs de categoria

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
fonte