【发布时间】:2012-12-29 17:08:42
【问题描述】:
我已经在 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() 中使用它。
我发现观察者对购物车的看法不一致。此外,更新事件被调度,但对于删除,它没有。所以我想我可以以某种方式将我的观察者添加到报价的价格更新中,如果这与观察者保持一致的话?
有什么建议吗?
【问题讨论】:
-
也许我不明白你的问题到底是什么。首先,您应该从您的块
getCacheKeyInfo()方法返回所需的数据,然后在您的占位符类的_getCacheId()中构建唯一键(即容器个人缓存 ID)。
标签: magento