MAGENTO从子类别获取描述

时间:2009-10-12 01:48:13

标签: magento

嗨,我是magento的新手,并且一直在尝试设置一个静态块,显示一个类别中的子类别列表。我成功地抓住了子类别的图像和名称,但由于某些原因我似乎无法得到描述。

这里的代码无法解释为什么它不起作用以及如何解决它?

我已经注释了几行,因为我正在尝试不同的方法来让它发挥作用。

  助手( '目录/输出');         $ category = $ this-> getCurrentCategory();         getCurrentChildCategories();         ?>
<?php foreach ($_categories as $_category): ?> <?php  echo 
     

$这 - &GT; htmlEscape($ _类别 - &GT; getCategoryDe​​scription());?&GT;

     
        <?php if($_category->getIsActive()): ?>

            <div class="subcategory-image">

                        <a href="<?php echo $_category->getURL()
     ?&gt;“title =”htmlEscape($ _ category-&gt; getName())   ?&gt;“中&GT;
                        </a>
                            <?php /* echo "Find this item->" */ ?>

                    </div> <div class="sub-category-container">
                    <h2><a href="<?php echo $_category->getURL()
     ?&gt;“title =”htmlEscape($ _ category-&gt; getName())   ?&gt;“中&GT; htmlEscape($ _类别 - &GT;的getName())   ?&GT;             getURL()?&gt;“   类= “moreLink” &GT; [更多...]                 getDescription()?&gt; - &gt;                      getDescription()):   ?&GT;                  categoryAttribute($ _ category,$ _description,'description'); ?&GT;       

         - &GT;      

      

2 个答案:

答案 0 :(得分:10)

这是其中一种情况,其中Varien决定他们应该在返回之前调用数据集合上的“load”,而实际上并不是必需的并且使得实用程序功能完全没用。如果你追踪代码{ {1}}您最终会在Mage_Catalog_Block_Navigation->getChildrenCategories()中找到这个:

Mage_Catalog_Model_Resource_Eav_Mysql4_Category

最后一行public function getChildrenCategories($category) { $collection = $category->getCollection(); /* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */ $collection->addAttributeToSelect('url_key') ->addAttributeToSelect('name') ->addAttributeToSelect('all_children') ->addAttributeToSelect('is_anchor') ->addAttributeToFilter('is_active', 1) ->addIdFilter($category->getChildren()) ->setOrder('position', 'ASC') ->joinUrlRewrite() ->load(); return $collection; } 的下一个意味着执行查询并加载集合,因此修改查询为时已晚。所以你要做的就是复制并粘贴代替调用->load();的内容,然后添加你想要使用的其他属性,如下所示:

getChildrenCategories

现在集合将包含description属性,以便getDescription()可以工作。请注意,您不需要调用$_categories = $category->getCollection() ->addAttributeToSelect( array('url_key','name','all_children','is_anchor','description') ) ->addAttributeToFilter('is_active', 1) ->addIdFilter($category->getChildren()) ->setOrder('position', 'ASC') ->joinUrlRewrite() ; ,它会在您开始使用迭代器时自动发生(foreach循环触发此操作)。这就是为什么将load()调用包含在该函数中是没有意义的,因为否则你可能只是在函数调用下面添加了一行:

load()

但是你必须复制函数的内容来调整查询。

答案 1 :(得分:0)

变化:

$ _类别 - &GT; getCategoryDe​​scription()

对此:

$ _类别 - &GT; getDescription()