我需要逻辑来显示类别树,如下所示:
Cat1 -> cat11 -> cat111
Cat2 -> cat21 -> cat211
Cat3 -> cat31 -> cat311
因此,如果我在cat211中,则在左栏中应显示其根父类别(Cat2)的所有类别。例如。在magento
Cat2 - > Cat21 - > Cat211
答案 0 :(得分:0)
我猜你的意思是类别树,这应该给你类别树。您可以看到正在应用的各种过滤器。 (你可以随时根据自己的需要做。)
<?php
$rootCatId = Mage::app()->getStore()->getRootCategoryId();
$catlistHtml = getTreeCategories($rootCatId, false);
echo $catlistHtml;
function getTreeCategories($parentId, $isChild){
$allCats = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('is_active','1')
->addAttributeToFilter('include_in_menu','1')
->addAttributeToFilter('parent_id',array('eq' => $parentId))
->addAttributeToSort('position', 'asc');
$class = ($isChild) ? "sub-cat-list" : "cat-list";
$html .= '<ul class="'.$class.'">';
foreach($allCats as $category)
{
$html .= '<li><span>'.$category->getName()."</span>";
$subcats = $category->getChildren();
if($subcats != ''){
$html .= getTreeCategories($category->getId(), true);
}
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}
?>
编辑:使用ID /当前类别ID获取所有父类别。
$id = Mage::registry('current_category'); //or if you are retrieving other way around
$category = Mage::getModel('catalog/category')->load($id);
$categorynames = array();
foreach ($category->getParentCategories() as $parent) {
$categorynames[] = $parent->getName();
}
print_r($categorynames); //dumping category names for eg.
答案 1 :(得分:0)
属性path
包含1/root_id/parent_id/.../category_id
形式的所有父ID。您可以使用$category->getPathIds()
将其作为数组进行检索(如果要排除类别本身的ID,则可以$category->getParentIds()
)。因为路径中的第一个ID始终是&#34; 1&#34;,所以您应该删除第一个数组项以从商店根类别开始:
$categoryIds = $category->getPathIds();
array_shift($categoryIds);
然后您可以使用集合一次加载这些:
$categoryCollection = $category->getCollection()->addIdFilter($categoryIds);
foreach ($categoryCollection as $categoryInPath) {
// do what you want with $categoryInPath
}