У меня есть одна категория, которая имеет 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>'; } } } }