Для кастомного меню навигации иногда нужно получить список всех категорий. Причем конкретного уровня. Сделать это можно так:



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


На этом всё, дальше с коллекцией делаем всё, что душа пожелает (причем скорей всего душа клиента).