我已经在magento中实现了标题的打孔,即使我已按每个客户使用它,我也需要能够通过使它适用于差异购物车项目计数来更深一层。
这是我的代码。
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应用程序未初始化,因此添加占位符属性的方法基本上不起作用,因为
Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
不行吧?
尽管它应该是什么样,但它似乎根本没有运行,就像我die()
在那儿打了个电话却什么也没发生。
那我想念的是什么?以及如何检索购物车中的物品计数,以便将其用于构建缓存ID?
进展:我发现
Enterprise_PageCache_Model_Cookie::COOKIE_CART
但这仅在购物车更新后发生变化。之后,它保持不变。这很奇怪,感觉像是解决方案,但其行为则相反。
我也找不到会话中的购物车数量。因此,我目前看到的唯一方法是在每次更新时将购物车数量保存在会话中,然后在中使用它_getIdentifier()
。
我发现观察者对于购物车不一致。另外,更新事件是分派的,但对于删除事件则不是。因此,我想我可以以某种方式将我的观察员添加到报价的价格更新中(如果这与拥有观察员一致)?
另外,我的确读过 购物车(报价)更改中的“全页缓存无效”,但它使用
Enterprise_PageCache_Model_Cookie::COOKIE_CART
尽管我认为问题出在其中,但这对我而言并不奏效。什么/如何?我不确定。
另外,我们正在运行的当前EE版本甚至在之下都没有Advanced文件夹
Model/Container
。我在用EE 1.10.1.1
有什么建议么?
_getIdentifier
以便该块对客户购物车是唯一的,甚至是客户购物车中商品的数量?