magento - retrieve all children categories given a category id
13,803
I think the class Mage_Catalog_Model_Category
already includes the function you are searching. It is called getChildren
:
public function retrieveAllChilds($id = null, $childs = null) {
$category = Mage::getModel('catalog/category')->load($id);
return $category->getChildren();
}
The function getChildren
returns children IDs comma-separated, getChildrenCategories
returns an array of Mage_Catalog_Model_Category
instances.
If you want to get the children categories recursively, you can use:
public function retrieveAllChilds($id = null, $childs = null) {
$category = Mage::getModel('catalog/category')->load($id);
return $category->getResource()->getChildren($category, true);
}
Author by
Luke
Updated on June 05, 2022Comments
-
Luke almost 2 years
As said in the title, i'm trying to do this stuff through my custom function:
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); }
but seems that there's something wrong in the stop or in the exit condition. the function retrieve correctly first 16 elements. anybody could help me?
-
Daniel Sloof about 12 yearsYou are exactly right, except that by default it will not fetch them recursively (so top level only). He will want to use: $category->getResource()->getChildren($category, true);