我已经在magento中实现了标题的打孔,即使我已经按照每个客户的方式工作,我也需要通过使其在diff cart项目计数上工作来更深入地使用这一级别。
这是我的代码。
class AD_PageCache_Model_Container_Header extends Enterprise_PageCache_Model_Container_Abstract {
protected function _getIdentifier() {
return $this->_getCookieValue(Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER, '');
}
// public function getCacheKeyInfo() {
// $info = parent::getCacheKeyInfo();
// die('boo');
// $info['cart_count'] = Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
// return $info;
// }
protected function _getCacheId() {
//return 'CONTAINER_HEADER_' . md5($this->_placeholder->getAttribute('cache_id') . $this->_placeholder->getAttribute('cart_count') ) . '_' . $this->_getIdentifier();
return 'CONTAINER_HEADER_' . md5( $this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier() );
}
protected function _renderBlock() {
$blockClass = $this->_placeholder->getAttribute('block');
$template = $this->_placeholder->getAttribute('template');
$block = new $blockClass;
$block->setTemplate($template);
return $block->toHtml();
}
}
我从Magento上的挖孔线程中读到的内容是,当FPC缓存为请求提供服务时Mage应用程序未初始化,所以基本上添加占位符属性的方法无效,因为{{1}不会起作用,对吧?
即使它应该如何,但它似乎根本没有运行,就像我在那里放了Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
电话但没有发生任何事情。
那么我错过了什么?如何检索购物车项目数,以便可以用它来构建缓存ID?
进展:我发现die()
,但这只会在购物车更新时更改一次。之后它保持不变。这很奇怪,这感觉就像解决方案,但其行为却说不然。
我无法在会话中找到购物车项目数。因此,我目前看到的唯一方法是在更新时将购物车数量保存在会话中,然后在Enterprise_PageCache_Model_Cookie::COOKIE_CART
中使用。
我发现观察者与购物车不一致。另外,更新事件是为了调度,但是为了删除,它不会。所以我想我可以添加我的观察者以某种方式对报价的价格更新,如果这与观察者一致吗?
有什么建议吗?
答案 0 :(得分:0)
请参阅我的类似问题:Full Page Cache invalidation on cart (quote) change
我放弃了实施,因为在我的情况下这是不可能的,但是我会进一步深入Enterprise_PageCache_Model_Container_Advanced_Quote
,因为在报价内容发生变化的情况下,购物车块似乎会使用它来刷新自己
答案 1 :(得分:0)
我怀疑你将此保存到会话中的想法实际上是一个非常好的,并且最有可能可靠地工作