嗨,我是magento的新手,并且一直在尝试设置一个静态块,显示一个类别中的子类别列表。我成功地抓住了子类别的图像和名称,但由于某些原因我似乎无法得到描述。
这里的代码无法解释为什么它不起作用以及如何解决它?
我已经注释了几行,因为我正在尝试不同的方法来让它发挥作用。
助手( '目录/输出'); $ category = $ this-&gt; getCurrentCategory(); getCurrentChildCategories(); ?&GT;<?php foreach ($_categories as $_category): ?> <?php echo
$这 - &GT; htmlEscape($ _类别 - &GT; getCategoryDescription());?&GT;
?&gt;“title =”htmlEscape($ _ category-&gt; getName()) ?&gt;“中&GT;<?php if($_category->getIsActive()): ?> <div class="subcategory-image"> <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;</a> <?php /* echo "Find this item->" */ ?> </div> <div class="sub-category-container"> <h2><a href="<?php echo $_category->getURL()
- &GT;
答案 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; getCategoryDescription()
对此:
$ _类别 - &GT; getDescription()