我如何获得所有类别和子类别?

时间:2013-01-11 14:09:31

标签: magento navigation categories

如果类别处于活动状态,如何获取所有类别和子类别,但“包含在导航菜单中”设置为“否”?

我尝试使用它:

<?php 
$_categories = Mage::getBlockSingleton('catalog/navigation'); 
foreach ($_categories->getStoreCategories() as $_category) { 
$category = Mage::getModel('catalog/category'); 
$category->load($_category->getId()); 
$subcategories = explode(',', $category->getChildren()); 
?> 
<dl> 
<dt><?php echo $this->htmlEscape($_category->getName()); ?></dt> 
<dd> 
<ol> 
<?php 
foreach ($subcategories as $subcategoryId) { 
$category->load($subcategoryId); 
echo '<li><a href="' . $category->getURL() . '">' . $category->getName() . '</a></li>'; 
} 
?> 
</ol> 
</dd> 
</dl> 
<?php

} 
?> 

但如果某个类别的“包含在导航菜单中”为“否”,则不会显示在首页上!

2 个答案:

答案 0 :(得分:30)

你只需改变一件事!当您致电$_categories = Mage::getBlockSingleton('catalog/navigation')时,您实际上是专门从catalog/navigation模型中获取类别 - 过滤掉“非导航”类别已经完成。相反,我们可以从catalog/category模型中获取一个集合,以确保我们在网站上提供所有类别:

$categories = Mage::getModel('catalog/category')
        ->getCollection()
        ->addAttributeToSelect('*')
        ->addIsActiveFilter();

请注意,我使用的是addIsActiveFilter(),以确保我们只获取当前有效/已启用的类别。

答案 1 :(得分:3)

我更喜欢使用目录/类别助手

$helper = Mage::helper('catalog/category');
$categories = $helper->getStoreCategories();