【问题标题】:Magento: Can't get categories childrenMagento:无法获得儿童类别
【发布时间】:2012-01-13 08:49:19
【问题描述】:

由于某种原因,此代码在尝试获取类别子类别时返回 NULL。

 <?php var_dump($_category->getChildrenCategories()); ?>

这是来自 .phmtl 文件的完整代码。

<ul id="nav_vert">
            <?php foreach ($this->getStoreCategories() as $_category): ?>
            <?php if ($_category->getIsActive()) { ?>
            <?php $open = $this->isCategoryActive($_category); ?>
            <?php $potential = $_category->hasChildren(); ?>
            <li><a href="<?php echo $this->getCategoryUrl($_category); ?>"<?php if($open) { echo ' class="open"'; } ?><?php if($potential) { echo ' class="potential"'; } ?> ><?php if($potential&&$open) { echo 'v '; } elseif($potential) { echo '> '; }else{ echo '  '; }?><?php echo $_category->getName();?></a>
                <?php if ($open && $potential): ?>
                <?php var_dump($_category->getChildrenCategories()); ?>
                <ul>
                    <?php foreach ($_category->getChildrenCategories() as $subcategory): ?>
                    <?php $subCat = Mage::getModel('catalog/category')->load($subcategory); ?>
                    <?php $open = $this->isCategoryActive($subCat); ?>
                    <?php $potential = $subCat->hasChildren(); ?>
                    <li><a href="<?php echo $this->getCategoryUrl($subCat); ?>"<?php if($open) { echo ' class="subopen"'; } ?><?php if($potential) { echo ' class="potential"'; } ?><?php if(!$potential&&$open) { echo ' class="final"'; } ?> ><?php if($potential&&$open) { echo ':: '; } elseif($potential) { echo '> '; }?><?php echo $subCat->getName(); ?> (<?php echo $subCat->getProductCount(); ?>)</a>
                        <?php if ($open && $potential): ?>
                        <ul>
                            <?php foreach ($subcategory->getChildrenCategories() as $subsubcategory): ?>
                            <?php $subsubCat = Mage::getModel('catalog/category')->load($subsubcategory); ?>
                            <?php $open = $this->isCategoryActive($subsubCat) ?>
                            <li><a href="<?php echo $this->getCategoryUrl($subsubCat); ?>" <?php if($open) { echo ' class="final"'; } ?>><?php echo $subsubCat->getName(); ?> (<?php echo $subsubCat->getProductCount(); ?>)</a></li>
                            <?php endforeach; ?>
                        </ul>
                        <?php endif; ?>
                    </li>
                    <?php endforeach; ?>
                </ul>
                <?php endif; ?>
            </li>
            <?php } ?>
            <?php endforeach ?>
        </ul>

这一行总是返回 true

<?php $potential = $_category->hasChildren(); ?>

而且我知道该类别有子类别。

谁能说明为什么这不起作用?

这就是我在页面中放置 phtml 的方式:

<reference name="left">
    <block type="catalog/navigation" name="catalog.vertnav" template="catalog/navigation/vert_nav.phtml" before="-" />
</reference>

Magento 版本 1.5.1.0

【问题讨论】:

    标签: magento


    【解决方案1】:

    尝试使用$_category-&gt;getChildren()(而不是$_category-&gt;getChildrenCategories()


    有一个轻松的一天,
    逾越节

    【讨论】:

    • 我最初有 getChildren,但它似乎使页面崩溃。我在某处读到他们在某个时候将其从 getChildren 更改为 getChildrenCategories?
    • 如果你尝试var_dump($subcategory),那么它肯定会导致页面崩溃,或者至少内存不足。改用var_dump($subcategory-&gt;debug()),您可能会发现getChildren 工作正常。
    【解决方案2】:

    你可能也想试试这个,

    foreach ($_category->getCategories($_category) as $subcategory):
    

    getCategories() 是一种更复杂的形式,但它也允许您进行更多控制。通过指定递归级别,您不仅可以检索孩子,还可以检索孙子女......

    【讨论】:

    • 我尝试了你的函数,但 &lt;?php var_dump($_category-&gt;getCategories($_category)); ?&gt; 也返回 NULL。我开始认为该块无法访问这些方法?
    【解决方案3】:

    试试这段代码,

    $this->getCurrentCategory()->getChildrenCategories()
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:
      <?php $helper = $this->helper('catalog/category') ?>
       <?php $categories = $this->getStoreCategories() ?>
        <?php foreach($categories as $category): ?>
          <?php $subcategories = $category->getChildren() ?>
            <?php foreach($subcategories as $subcategory): ?>
              <?php $subsubcategories = $subcategory->getChildren() ?>
               <?php foreach($subsubcategories as $subsubcategory): ?>
               <?php endforeach; ?><!-- end foreach subsubcategories -->
            <?php endforeach; ?><!-- end foreach subcategories -->
        <?php endforeach; ?><!-- end foreach categories -->
      

      这是提取子类别背后的基本思想。
      因此,您可以相应地进行处理。

      【讨论】:

        猜你喜欢
        • 2020-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多