如何实现购物车块的magento缓存打孔



Im使用Magento EE 1.12版,启用了全页缓存

a) 我的产品详细信息页面已缓存b) 因此,我的购物车在此页面中不显示动态商品计数c) 所以我无法在我的产品详细信息页面中显示有效的购物车项目计数

我遵循的步骤

1) 我创建了一个块并从header.phtml调用2) 试图使topcart.html块不被缓存

作为我在马根托的新手,我得到了一些缓存打孔的链接

我关注了以下链接,但没有成功

我的文件结构

app-code-local-Enterprise-PageCache->etc-cache.xml

和PageCache-模型-容器-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();
}

请用有用的链接和步骤帮助我

我也遇到了同样的问题。所以,我认为,问题是,在这种情况下,我们没有可缓存的模板。因此,如果你以你的方式缓存它(就像我一样),你最终会在缓存文件中得到一个base64编码的链接列表。为了验证这一点,我解压缩了var/full_page_cache中的文件,现在开始:购物车计数是缓存的,即使你的购物车发生了变化,也不会更改,而且它在服务器端是不可替换的(至少不是以干净的方式)。

这种行为的原因很简单:对于FPC,只渲染模板,传递一些值。但在这种特殊情况下,模板只呈现一个列表,只访问一个块方法(getLinks)。在布局xml文件中,您会发现一些对"addLink"的调用,它为该块提供了信息,这就是为什么所有结果都经过base64编码并最终出现在缓存文件中的原因。您的容器无法访问它们。

但我认为,有办法解决这个问题。只需收集要渲染的链接,并为此创建自定义模板和自定义块。您现在可以以适当的方式缓存它了。

最新更新