getStoreCategories()什么都不返回

时间:2010-11-11 14:45:52

标签: magento

我目前正在学习Magento,似乎遇到了一个熟悉我职位的很多人的问题,但是没有一个给定的解决方案适合我。我希望使用根类别中找到的所有类别填充导航菜单,但我必须执行此操作的代码段不起作用。以下是应该执行此类任务的代码摘录:

<div id="utilities">
    <?php $_menu = ''?>
    <?php foreach ($this->getStoreCategories() as $_category): ?>
        <?php $_menu .= $this->drawItem($_category) ?>
    <?php endforeach ?>
    <?php if ($_menu): ?>
    <div class="nav-container">

        <ul id="nav">

            <?php $_anyActive = false; foreach ($this->getStoreCategories() as $_category) { $_anyActive = $_anyActive || $this->isCategoryActive($_category); } ?>
             <li class="home <?php echo !$_anyActive ? 'active' : '' ?>"><a href="<?php echo $this->getUrl('')?>"><span><?php echo $this->__('Home') ?></span></a></li> 

            <?php echo $_menu; ?>
        </ul>

    </div>
    <?php endif; ?>
</div>

现在,我对此进行了相当广泛的解决,并开始在$ this-?getStoreCategories()上执行var_dump(),但这返回了NULL。我知道该语句没有比该方法更进一步,因此可以得出结论错误在于这行代码:

<?php foreach ($this->getStoreCategories() as $_category): ?>

我尝试创建新的根类别并使用子类别填充这些类别(也填充产品),然后将管理设置中的根类别更改为新创建的根类别,但仍无济于事。我知道这个代码被拉入页面,好像我在打印到屏幕上的违规语句之前输入静态文本。

至少可以说,我很沮丧。任何帮助都会非常感激,并且提前非常感谢你!

2 个答案:

答案 0 :(得分:10)

您的问题是您正在使用没有getStoreCategories()方法的阻止。 $this - 是对手动创建的块的引用。

Magento具有高度的抽象性,因此这里的每个问题都可以通过不同的方式解决。

使用:

Mage::helper('catalog/category')->getStoreCategories()

代替:

$this->getStoreCategories()

当它工作时 - 更好地在你的块中创建getStoreCategories()并将此代码移动到它 - 正如Magento架构所假设的那样。

答案 1 :(得分:1)

获取类别菜单的推荐方法是使用方法Mage_Catalog_Block_Navigation::renderCategoriesMenuHtml()

因此,对于Mage_Catalog_Block_Navigation或从其下降的任何块,都可以使用调用该方法的模板app/code/design/base/default/template/navigation/top.phtml