我在magento模板中遇到foreach循环问题:
$cats = Mage::helper('catalog/category')->getStoreCategories();
foreach ($cats as $cat) {
if($cat->getIsActive()&&$cat->getProductCount()) {
echo "<div class=\"grid_6\">";
echo $this->getLayout()->createBlock('catalog/product_new')
->setTemplate('catalog/product/new.phtml')
->setCategoryId($cat->getId())
->setColumnCount(2)
->setBlockTitle("Just Added in <a href=".$cat->getUrl().">".$cat->getName()."</a>")
->toHtml();
echo "</div>";
}
}
Run Code Online (Sandbox Code Playgroud)
当一个相同的块重复4次(我有4个主要类别),它应该显示4个不同的块,每个类别一个.就好像每个新迭代都没有更新$ cat-> getId(),$ cat-> getName()和$ cat-> getUrl()语句.
我在这做错了什么?
谢谢...
这里只是一个猜测,但看起来该catalog/product_new块不是设计为在一个请求上多次使用.如果查看类定义Mage_Catalog_Block_Product_New,其伪构造函数包括以下内容
$this->addData(array(
'cache_lifetime' => 86400,
'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG),
));
Run Code Online (Sandbox Code Playgroud)
a cache_lifetime和cache_tags属性的存在是Magento的布局渲染系统的暗示,该块应该被缓存.
所以,正在发生的是第一次渲染块时,结果会被缓存.下次渲染块时,不会重新渲染块,而是将结果从缓存中拉出.
我的建议是创建一个自定义代码模块,编写一个扩展旧块类的新块类,并重新定义_construct或者getCacheKeyInfo以"允许"多次渲染块的方式重新定义.