Как отфильтровать категории в коллекции по их уровню

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


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

Вертикальная линия Обсудить проект
Давайте добьемся успеха вместе

Контактные данные




Нажимая кнопку «Отправить», я даю свое согласие на обработку моих персональных данных в соответствии с Федеральным законом от 27.07.2006 года №152-ФЗ «О персональных данных», на условиях и для целей, определенных в политике конфиденциальности

Vertical Line
Choose languageRU

© 2009—2025 Mygento. Все права защищены. Политика конфиденциальности

Menu Menu Menu

Аккредитованная
ИТ-компания