Получить коллекцию категорий для инвалидов
Немного просто, я просто хочу загрузить коллекцию категорий и включить в нее отключенные категории либо самостоятельно, либо вместе с включенными категориями.
Похоже, что стандартный вызов сбора данных содержит автоматический "активный" фильтр:
Mage::getModel('catalog/category')->getCollection();
Если кто-нибудь делал это раньше, это было бы большой помощью!
3 answers
У меня была та же проблема, что и у вас:
Я передавал следующее в addIdFilter:
$category->getChildren();
Внутренне getChildren()
, а также getAllChildren()
используют Mage_Catalog_Model_Resource_Category::getChildren()
, который явно присоединяется к атрибуту is_active
и возвращает идентификаторы только активных дочерних элементов.
Но модель ресурсов также имеет метод getChildrenIds()
, который не добавляет это соединение. Кроме того, он удобно возвращает список, разделенный запятыми по умолчанию.
Решение
Заменить
$categoryCollection->addIdFilter(explode(',', $parentCategory->getChildren()));
С
$categoryCollection->addIdFilter(
$parentCategory->getResource()->getChildrenIds($parentCategory)
);
Я ожидаю, что следующее даст вам то, что вам нужно:
$categories = Mage::getModel('catalog/category')
->getCollection()
->addFieldToFilter('is_active',array("in"=>array('0', '1')))
->addAttributeToSelect('*'); // optional
Я понял, что вел себя как идиот!
Я передавал следующее в addIdFilter:
$category->getChildren();
Вместо:
$category->getAllChildren();
Мой окончательный код теперь таков:
$category = Mage::getModel('catalog/category')->load($id);
$categories = $category->getCollection()
->addAttributeToSelect(array('name', 'thumbnail', 'description'))
->addIdFilter($category->getAllChildren());