Как сказано в названии, я пытаюсь сделать это через свою пользовательскую функцию:
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 элементов. Кто-нибудь мог мне помочь?
Я думаю, что класс 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); }