我使用Magento EE版本1.12启用了全页面缓存
a)我的产品详细信息页面已缓存 b)因此,此页面中的购物车不显示动态项目计数 c)因此我无法在产品详细信息页面中显示有效的购物车项目数
我跟着的步骤
1)我创建了一个块并从header.phtml调用 2)试图使topcart.phtml块不被缓存
作为magento的新手,我获得了缓存打孔的一些链接
我按照以下链接但没有成功
我的文件结构
app- code - local - Enterprise - PageCache - > etc - cache.xml
和PageCache - model -container - TopCart.php
代码如下所示
我创建了文件 cache.xml和cart.php容器文件
<page_html_topcart>
<block>page/html_topcart</block>
<name>topcart</name>
<placeholder>PAGE_HTML_HEADER_CART</placeholder>
<container>Enterprise_PageCache_Model_Container_TopCart</container>
<cache_lifetime>36400</cache_lifetime>
</page_html_topcart>
这是我的topcart.php容器文件,如
protected function _getIdentifier()
{
$cacheId = $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER, '')
. '_'
. $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER_LOGGED_IN, '');
return $cacheId;
}
protected function _getCacheId()
{
return 'CONTAINER_TOPCART_' . md5($this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier());
}
protected function _renderBlock()
{
$block = $this->_getPlaceHolderBlock(); //('page/html_header_cart');
Mage::dispatchEvent('render_block', array('block' => $block, 'placeholder' => $this->_placeholder));
return $block->toHtml();
}
请帮助我提供有用的链接和步骤
答案 0 :(得分:3)
我遇到了同样的问题。所以,我认为,问题是,在这种情况下我们没有可缓存的模板。因此,如果您按照您的方式(也像我一样)缓存它,您最终会在缓存文件中的base64编码链接列表中。为了验证这一点,我解压缩了var / full_page_cache中的文件 - 这里我们去:购物车计数被缓存,即使您的购物车发生变化也不会更改,并且它在服务器端不可替换(至少不在服务器端)干净的方式)。
此行为的原因很简单:对于FPC,您只渲染模板,传递一些值。但该模板仅在该特殊情况下呈现列表,仅访问一个块方法(getLinks)。在你的布局xml文件中,你会发现一些“addLink”调用,这些调用会提供该块,这就是为什么所有结果都成为base64编码并最终出现在缓存文件中的原因。它们无法通过您的容器访问。
但我认为,有一种方法可以解决这个问题。只需收集您想要呈现的链接,然后为其创建自定义模板和自定义块。您现在可以以适当的方式缓存它。