5

我花了很多时间弄清楚代码/参数以在 magento 中为 Mage_Catalog_Block_Product_Price 块打孔。我可以在第一次加载页面时显示价格,但是当缓存 id 是唯一的时,它不会正确呈现价格(它确实会在应该缓存时正确缓存它)。我知道我需要向它发送参数,例如 product_id 等,但不清楚需要从 getCacheKeyInfo 将什么(例如'xx')发送到缓存容器中以在 $this->_placeholder->getAttribute('xx' 中使用)。以及需要准备什么并将其从 _renderView() 发送到价格布局/视图。

到目前为止,我已成功完成以下操作(它们各自输出测试数据)

  • 在我的模块 /etc 文件夹中创建了 cache.xml
  • 创建缓存容器模型并验证作品(只需要设置)
  • 将 Mage_Catalog_Block_Product_Price 重写/扩展为我自己的模型以添加 getCacheKeyInfo()

所以问题是我已经尝试了容器模型的 _getCacheId() 和 _renderBlock() 与 getCacheKeyInfo() 的许多变体,如上所述。但我遇到了一个绊脚石。如果有人能引导我朝着正确的方向前进,将不胜感激。

4

1 回答 1

2

我也一直在为整页缓存而苦苦挣扎。
这些是我的发现,对我很有帮助。

请看:app/code/core/Enterprise/PageCache/Model/Processor/Default.php47号线

 /**
 * Check if request can be cached
 *
 * @param Zend_Controller_Request_Http $request
 * @return bool
 */
public function allowCache(Zend_Controller_Request_Http $request)
{
    foreach ($this->_noCacheGetParams as $param) {
        if (!is_null($request->getParam($param, null))) {
            return false;
        }
    }
    if (Mage::getSingleton('core/session')->getNoCacheFlag()) {
        return false;
    }
    return true;
}

查看此功能似乎有两种方法可以避免(禁用)整页缓存:

GET 参数:
可以使用三个下划线前缀的参数 'store' 或 'from_store' 来避免缓存。例子:

http://magentourl.com/catelog/category/view/id/123?___store

Mage::getUrl('catalog/category/view', array('id' => 123, 'query' => array('___store' => '')))

会话变量:
您还可以通过设置(临时)会话变量来避免整页缓存:

Mage::getSingleton('core/session')->setNoCacheFlag(true)
于 2013-02-06T13:21:06.367 回答