Мне нравится ответ @Joe Constant, но когда я попробовал его, у меня были проблемы только с получением первого уровня дочерних категорий, даже с $recursionLevel
, установленным на 0
.В качестве обходного пути я написал эту функцию (поместите ее в (локальную версию) в любом блоке, в котором вам нужна отсортированная дочерняя коллекция):
public function getChildrenCollection($parentId=false, $sort='ASC', $attribute='position')
{
if (empty($parentId) || !is_numeric($parentId)) return false;
$childrenArray = explode(',',Mage::getModel('catalog/category')->load($parentId)->getChildren());
// remove parent id from array in case it gets returned
if ($key = array_search($parentId, $childrenArray)) {
unset($childrenArray[$key]);
}
$collection = Mage::getModel('catalog/category')->getCollection()
->addAttributeToFilter('entity_id', array('in' => $childrenArray))
->addAttributeToSelect('*');
if (!empty($sort)) {
return $collection->setOrder($attribute, $sort);
}
return $collection;
}
Затем вы можете выполнять итерацию по коллекции и делать все, что вам нужно, как это:
foreach (getChildrenCollection($parentCategoryId) as $child) {
Zend_Debug::dump($child->getData());
}
Надеюсь, это поможет.