1 авг. 2013
Для кастомного меню навигации иногда нужно получить список всех категорий. Причем конкретного уровня. Сделать это можно так:
$model=Mage::getModel('catalog/category');
$categories=$model->getCollection()->addLevelFilter(2)
->addAttributeToSelect('*')->addIsActiveFilter();
Однако, это не всегда правильно. Объясню почему.
Если я выведу запрос к базе, то получу следующее:
SELECT `main_table`.* FROM `catalog_category_flat_store_1` AS `main_table` WHERE (main_table.level <= 2) AND (is_active = '1')
Можно легко заметить, что используется условие <=, что не подходит. (т.к. при фильтрации категорий 3го уровня еще получим и 2й уровень).
Поэтому нужно делать фильтрацию коллекции так:
$categories=$model->getCollection()->addAttributeToFilter('level',2)
->addAttributeToSelect('*')->addIsActiveFilter();
На этом всё, дальше с коллекцией делаем всё, что душа пожелает (причем скорей всего душа клиента).