如何获取所有类别和子类别?

Posted

技术标签:

【中文标题】如何获取所有类别和子类别?【英文标题】:How I can get all categories and subcategories? 【发布时间】:2012-12-26 03:14:18 【问题描述】:

如果类别处于活动状态,但“包含在导航菜单中”设置为“否”,我

我尝试使用这个:

<?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

 
?> 

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

【问题讨论】:

【参考方案1】:

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

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

请注意,我使用addIsActiveFilter() 来确保我们只获取当前处于活动/启用状态的类别。

【讨论】:

谢谢,你真的帮了大忙!显示什么是必要的,然后我会按原样带来!【参考方案2】:

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

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

【讨论】:

我什么都没得到,$helper = Mage::helper('catalog/category'); $categories = $helper->getStoreCategories(); foreach ($categories as $_category) print_r($_category->getName());死();

以上是关于如何获取所有类别和子类别?的主要内容,如果未能解决你的问题,请参考以下文章

获取总类别树(所有类别及其子类别的列表)与根据需要获取每个分支?

所有产品(类别和子类别产品)都计入 magento 中的类别列表页面

如何在 Laravel 刀片类别下获取子类别

类别和子类别

使用beautifulsoup刮擦类别和子类别

如何在类别和子类别之间创建关系