【问题标题】:Holepunching of header in magento store在 magento 商店中对标头进行打孔
【发布时间】: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


【解决方案1】:

查看我的类似问题:Full Page Cache invalidation on cart (quote) change

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

【讨论】:

  • 它使用Enterprise_PageCache_Model_Cookie::COOKIE_CART 处理,这在我的情况下效果不佳,尽管我认为问题出在其中。什么/如何?我不知道。此外,我们运行的当前版本的 EE 甚至在 Model/Container 下都没有 Advanced 文件夹。
  • @Ashfame 你在运行 EE 1.11 吗?
  • 是的,当前版本是EE 1.10.1.1。我们的升级计划将在未来几周内到期。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多