Magento – получить родительскую категорию и все подкатегории

У меня есть одна категория, которая имеет 2 подкатегории. В каждой из этих категорий есть 5 подкатегорий.

Есть ли способ получить список всех этих 10 подкатегорий?

благодаря

РЕДАКТИРОВАТЬ:

Что-то вроде этого:

Main Category Sub_Cat_1 Cat_1 Cat_2 Cat_3 Sub_Cat_2 Cat_4 Cat_5 Cat_6 Wanting output like: Cat_1 Cat_2 Cat_3 Cat_4 Cat_5 Cat_6 

благодаря

Все ответы до сих пор загружают дочерние категории в цикле, что, как правило, является плохой практикой и вызывает выполнение множества SQL-запросов, где будет достаточно одного.

Выполнение единого запроса:

Пусть $parentCategory будет вашей основной категорией , тогда эта коллекция будет загружать все подкатегории, на двух уровнях ниже:

 $subcategoryCollection = Mage::getModel('catalog/category') ->getCollection() ->addFieldToFilter('level', $parentCategory->getLevel() + 2) ->addFieldToFilter('path', ['like' => $parentCategory->getData('path') . '/%']); 

Поле path содержит идентификатор категории с префиксом всех идентификаторов предков в форме 1/2/3 . База данных – это столбец в catalog_category_entity который имеет индекс, поэтому сравнение, подобное этому, не имеет проблем с производительностью.

Догадаться:

 $cat = Mage::getModel('catalog/category')->load(24); $subcats = $cat->getChildren(); foreach(explode(',',$subcats) as $subCatid) { $_category = Mage::getModel('catalog/category')->load($subCatid); if($_category->getIsActive()) { $sub_cat = Mage::getModel('catalog/category')->load($_category->getId()); $sub_subcats = $sub_cat->getChildren(); foreach(explode(',',$sub_subcats) as $sub_subCatid) { $_sub_category = Mage::getModel('catalog/category')->load($sub_subCatid); if($_sub_category->getIsActive()) { echo '<li class="sub_cat"><a href="'.$_sub_category->getURL().'" title="View the products for the "'.$_sub_category->getName().'" category">'.$_sub_category->getName().'</a></li>'; } } } } 

Спасибо, что посмотрели!

Я разработал рекурсивную функцию, чтобы получить всех детей категории

 $categoryObject = Mage::getModel('catalog/category')->load(CATID); $children = MODEL_OBJECT->getChildCategories($categoryObject); // IN MODLE FILE public $_catIds = array(); public function getChildCategories($categoryObject){ $categories = $categoryObject->getChildrenCategories(); foreach ($categories as $catgory){ if($catgory->hasChildren()){ $this->getChildCategories($catgory); } $this->_catIds[] = $catgory->getId(); } return $this->_catIds; } 

Надеюсь, что это поможет вам.

 $this->getCurrentCategory()->getParentCategory()->getData(); 

попробуй это

То, что я делаю, это рекурсивно найти идентификатор категории предков. Найдя его, я могу напечатать текущие категории подкатегорий. Если в текущей категории нет детей, я просто напечатаю подкатегорию отца. Таким образом, вы можете иметь бесконечные подкатегории и все еще иметь возможность отображать список подкатегорий.

  $_helper = Mage::helper("catalog/category"); $rootCat = Mage::app()->getStore()->getRootCategoryId(); $current = Mage::registry('current_category'); show_cat($current,$_helper,$rootCat); function show_cat($child,$_helper,$rootCat){ if ($child){ //look for anchestor $parentid = $child->getParentId(); $parent = Mage::getModel("catalog/category")->load($parentid); if($parentid != $rootCat) { //find the anchestor show_cat($parent,$_helper,$rootCat); }else{ //is root $_subcategories = $parent->getChildrenCategories(); if(count($_subcategories)>0){ echo '<ul>'; foreach($_subcategories as $_category){ echo '<li>'; echo '<a href="'.$_helper->getCategoryUrl($_category).'">'.$_category->getName().'</a>'; if($child->getId() == $_category->getId()){ $current = Mage::registry('current_category'); if ($current){ //handle current $_current_subcategories = $current->getChildrenCategories(); if(count($_current_subcategories)>0){ //the current cat has childrens echo '<ul>'; foreach($_current_subcategories as $_sub_category){ echo '<li>'; echo '<a href="'.$_helper->getCategoryUrl($_sub_category).'">'.$_sub_category->getName().'</a>'; echo '</li>'; } echo '</ul>'; }else{ //the current cat has no childrens $current_parent = $current->getParentId(); $current_parent = Mage::getModel("catalog/category")->load($current_parent ); $_current_subcategories = $current_parent ->getChildrenCategories(); echo '<ul>'; foreach($_current_subcategories as $_sub_category){ echo '<li>'; echo '<a href="'.$_helper->getCategoryUrl($_sub_category).'">'.$_sub_category->getName().'</a>'; echo '</li>'; } echo '</ul>'; } } } echo '</li>'; } echo '</ul>'; } } } }