加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP / Magento – foreach中的变量未正确更新

发布时间:2020-12-13 21:43:01 所属栏目:PHP教程 来源:网络整理
导读:我在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('
我在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>";
    }
}

当一个相同的块重复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),));

cache_lifetime和cache_tags属性的存在是Magento的布局渲染系统提示应该缓存此块的提示.

所以,正在发生的是第一次渲染块时,结果会被缓存.下次渲染块时,不会重新渲染块,而是将结果从缓存中拉出.

我的建议是创建一个自定义代码模块,编写一个扩展旧块类的新块类,并以一种“允许”多次渲染块的方式重新定义_construct或getCacheKeyInfo.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读