magento - получить все дочерние категории по идентификатору категории - PullRequest
2 голосов
/ 21 марта 2012

Как сказано в заголовке, я пытаюсь сделать это с помощью своей пользовательской функции:

public function retrieveAllChilds($id = null, $childs = null){

        $childIdsArray = is_null($childs) ? array() : $childs;
        $category = is_null($id) ? $this->getCurrentCategory() : $this->getCategoryFromId($id);
        if (count($this->getChildrenCategories($id)) > 0) {
            $c = count($this->getChildrenCategories($id));
            $tmp_array = array();
            foreach ($this->getChildrenCategories($id) as $category) {
                array_push($tmp_array, $category->getId());             
            }
            $childIdsArray = array_merge($childIdsArray, $tmp_array);
            foreach ($this->getChildrenCategories($id) as $category){
                $this->retrieveAllChilds($category->getId(), $childIdsArray);
            }
        }
        else{
            return array_unique($childIdsArray);
        }

        return array_unique($childIdsArray);
}

, но кажется, что что-то не так в остановке или в состоянии выхода.функция извлекает правильно первые 16 элементов.кто-нибудь может мне помочь?

1 Ответ

7 голосов
/ 21 марта 2012

Я думаю, что класс Mage_Catalog_Model_Category уже содержит функцию, которую вы ищете.Она называется getChildren:

public function retrieveAllChilds($id = null, $childs = null) {
    $category = Mage::getModel('catalog/category')->load($id);
    return $category->getChildren();
}

Функция getChildren возвращает идентификаторы детей через запятую, getChildrenCategories возвращаетмассив Mage_Catalog_Model_Category экземпляров.

Если вы хотите рекурсивно получить дочерние категории, вы можете использовать:

public function retrieveAllChilds($id = null, $childs = null) {
    $category = Mage::getModel('catalog/category')->load($id);
    return $category->getResource()->getChildren($category, true);
}
...