Magento 获取子类别/类别集合处理。编程效率

Posted

技术标签:

【中文标题】Magento 获取子类别/类别集合处理。编程效率【英文标题】:Magento get child categories / category collection handling. Programming efficiency 【发布时间】:2014-06-23 06:46:48 【问题描述】:

好的,我在下面编写的代码效果很好,但是我有一些页面可能会达到几百个类别,我不想每次都通过 foreach 循环 ping 数据库。基本上是在寻找更好的方式来处理集合。其次,有没有办法可以验证此类别是否处于活动状态。

<ul>
    <?php $_helper       = Mage::helper('catalog/category') ?>
    <?php $_categories   = $_helper->getStoreCategories() ?>

    <?php foreach($_categories as $_category): ?>
        <?php $_category      = Mage::getModel('catalog/category')->load($_category->getId()) ?>
        <?php $_subcategories = $_category->getChildrenCategories() ?>

            <?php foreach($_subcategories as $_subcategory): ?>
                <li><a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>"><?php echo $_subcategory->getName() ?></a></li>
            <?php endforeach; ?>

    <?php endforeach; ?>
</ul>

【问题讨论】:

这可能是您最好的选择。您可以获取类别集合,然后使用类别的path 使用一些自定义 PHP 确定子项。 ($_parent-&gt;getPath; /* 1/2/3 */ $_child-&gt;getPath(); /* 1/2/3/4 */) 【参考方案1】:

如果您查看 getStoreCategories 调用的代码,它使用Mage_Catalog_Model_Resource_Category_Tree。也许您可以像这样自己使用它:

<?php
require_once('app/Mage.php');
Mage::app();
$parent = Mage::app()->getStore()->getRootCategoryId();
$recursionLevel = 2;
$tree = Mage::getResourceModel('catalog/category_tree');
/* @var $tree Mage_Catalog_Model_Resource_Category_Tree */
$nodes = $tree->loadNode($parent)
    ->loadChildren($recursionLevel)
    ->getChildren();

$tree->addCollectionData(null, false, $parent);

foreach ($nodes as $node) 
    /** @var $node Varien_Data_Tree_Node */
    print_r($node->getData()); // first level category data
    foreach ($node->getChildren() as $childNode) 
        print_r($childNode->getData()); // second level category data
    

【讨论】:

以上是关于Magento 获取子类别/类别集合处理。编程效率的主要内容,如果未能解决你的问题,请参考以下文章

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

在Magento中获取子类别

产品没有出现在Magento2子类别上

如何在 Magento 中使用产品 URL 附加类别和子类别 slug

Magento 中的子类别列表

删除magento中的空类别