11

我已经在 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().

我发现观察者对购物车的看法不一致。此外,更新事件被调度,但对于删除,它没有。所以我想我可以以某种方式将我的观察者添加到报价的价格更新中,如果这与观察者保持一致的话?

有什么建议么?

4

2 回答 2

0

请参阅我的类似问题:购物车(报价)更改时的整页缓存失效

我放弃了实施,因为在我的情况下这是不可能的,但我会Enterprise_PageCache_Model_Container_Advanced_Quote进一步深入研究,因为它似乎被购物车块用来在报价内容发生变化的情况下刷新自身

于 2013-01-17T22:04:41.793 回答
0

我怀疑您将其保存到会话中的想法实际上是一个非常好的想法,并且最有可能可靠地工作

于 2013-03-04T16:30:32.077 回答