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

Don*_*nie 12 navigation magento 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

} 
?> 
Run Code Online (Sandbox Code Playgroud)

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

100*_*les 30

你只需改变一件事!当你打电话给$_categories = Mage::getBlockSingleton('catalog/navigation')你时,实际上是从catalog/navigation模型中抓取了类别- 过滤掉"非导航"类别已经完成了.相反,我们可以从catalog/category模型中获取一个集合,以确保我们在网站上获得所有类别:

$categories = Mage::getModel('catalog/category')
        ->getCollection()
        ->addAttributeToSelect('*')
        ->addIsActiveFilter();
Run Code Online (Sandbox Code Playgroud)

请注意,我addIsActiveFilter()用来确保我们只获取当前活动/启用的类别.