как отсортировать категории, как они показаны в админке?

15

Вот код:

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

Пожалуйста, совет, спасибо!

Амир Сиддик
источник

Ответы:

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
}
Мариус
источник
Спасибо за фрагмент, но я хочу придерживаться своего кода, так как он уже применяется в шаблоне. Как мы можем добавить этот атрибут сортировки в $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren();? Спасибо!
Амир Сиддик
3
Вы можете заменить getChildren()на, getChildrenCategories()и вы должны отсортировать их. Но все же вы получаете объекты категории, а не идентификаторы. Если вам нужны идентификаторы, вы можете просмотреть дочерние категории и объединить их идентификаторы. Я не очень понимаю, чего вы пытаетесь достичь.
Мариус
^^ Мне бы хотелось, чтобы где-то было более четко задокументировано, что getChildren()возвращает несортированные идентификаторы и getChildrenCategories()возвращает отсортированные объекты. Это все прояснило для меня, сами документы magento до сих пор не проясняют это.
вафля
уверен, что getChildrenCategories не работает с плоскими категориями
Сэмайер,
7

Вы можете попробовать изменить свой код, чтобы использовать хорошее сочетание getChilderCategories () и функции toArray.

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

Функция getChildrenCategories выдаст вам коллекцию в том же порядке, что и в разделе администратора, а затем, вызвав toArray и запросив только атрибут Right_id, вы получите массив идентификаторов категорий.

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"
    }
}
Дэвид Мэннерс
источник