Вот еще один способ сделать это, если вы не хотите связываться с вещами treeModel или хотите больше контролировать загрузку категорий:
function getCategoryTree($root_category_name)
{
$categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect("*")
->addFieldToFilter("Name",array("eq"=>$root_category_name));
$stack = array();
$category = $categories->getFirstItem()->getData();
$categories=array();
array_push($stack, $category);
//regular recursion is boring, let's do a stack
while(count($stack) > 0)
{
$category = array_pop($stack);
array_push($categories, $category);
$children = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect("*")
->addFieldToFilter("parent_id",array("eq"=>$category['entity_id']))
->addAttributeToSort("position","desc");
foreach ($children as $child)
{
array_push($stack, $child->getData());
}
}
return $categories;
}
Это даст вам массив категорий, представляющих полное дерево категорий с корнем в верхней категории с именем «Некоторое имя категории», по порядку, со всеми данными категории. Настройте это, чтобы выбрать только нужные вам поля вместо "*".
Этот метод может дать вам более точный контроль загрузки дерева категорий и того, как вы хотите структурировать данные впоследствии. Например, вы можете тривиально изменить это, чтобы создать иерархическое дерево вместо плоского массива, а затем сериализовать его в объект JSON для отправки клиенту.
Добавьте любые фильтры, которые вам нравятся (активные и т. Д.) На любом уровне, который вам нравится, чтобы получить еще больший контроль.