¿Cómo ordenar las categorías como se muestran en admin?

15

Aquí está el 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 consejo, gracias!

Aamir Siddique
fuente

Respuestas:

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
fuente
Gracias por el fragmento, pero quiero mantener mi código ya que ya está aplicado en la plantilla. ¿Cómo podemos agregar este atributo de clasificación en el $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? ¡Gracias!
Aamir Siddique
3
Puede reemplazar getChildren()con getChildrenCategories()y debe ordenarlos. Pero aún así obtienes los objetos de categoría, no los identificadores. Si necesita los identificadores, puede recorrer las categorías secundarias y concatenar sus identificadores. Realmente no entiendo lo que estás tratando de lograr.
Marius
^^ Desearía que estuviera más claramente documentado en algún lugar que getChildren()devuelva ID sin clasificar y getChildrenCategories()devuelva objetos ordenados. Esto me aclaró todo, los propios documentos de magento a partir de ahora no lo aclaran.
waffl
bastante seguro de que getChildrenCategories no funciona con las Categorías planas
Samyer
7

Puede intentar cambiar su código para usar una buena combinación de getChilderCategories () y la función toArray.

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

La función getChildrenCategories le dará una colección en el mismo orden que la sección de administración y luego llamando a Array y solo preguntando por el atributo derechos_id tendrá una matriz de identificadores de categoría

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 modales
fuente