Получить коллекцию категорий для инвалидов


Немного просто, я просто хочу загрузить коллекцию категорий и включить в нее отключенные категории либо самостоятельно, либо вместе с включенными категориями.

Похоже, что стандартный вызов сбора данных содержит автоматический "активный" фильтр:

Mage::getModel('catalog/category')->getCollection();

Если кто-нибудь делал это раньше, это было бы большой помощью!

Author: Fabian Schmengler, 2014-06-11

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)
);
 2
Author: Fabian Schmengler, 2016-08-30 07:26:15

Я ожидаю, что следующее даст вам то, что вам нужно:

$categories = Mage::getModel('catalog/category')
    ->getCollection()
    ->addFieldToFilter('is_active',array("in"=>array('0', '1')))
    ->addAttributeToSelect('*'); // optional
 2
Author: Douglas Radburn, 2014-06-11 15:56:54

Я понял, что вел себя как идиот!

Я передавал следующее в addIdFilter:

$category->getChildren();

Вместо:

$category->getAllChildren();

Мой окончательный код теперь таков:

$category = Mage::getModel('catalog/category')->load($id);
    $categories = $category->getCollection()
    ->addAttributeToSelect(array('name', 'thumbnail', 'description'))
    ->addIdFilter($category->getAllChildren());
 2
Author: Adam Moss, 2014-06-11 16:02:24