在magento商店中对标题进行打孔


10

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

有什么建议么?


不确定,但是我认为这个问题与堆栈溢出有关,但与该站点无关...
Sergei Guk 2013年

2
打孔似乎是在非传统意义上使用的,您能解释不使用行话就尝试实现的功能吗?
拉尔夫·蒂斯

1
为什么不在其后附加客户购物车ID,_getIdentifier以便该块对客户购物车是唯一的,甚至是客户购物车中商品的数量?
B00MER 2013年

@SergeiGuk好吧,这与Magento密切相关
j0k

@RalphTice我正在尝试在标题中实现购物车值指示器,该指示器向用户显示其购物车中有多少物品。由于每个用户的值不同,因此我不希望将其缓存。
Nirav Sheth

Answers:


3

使用Enterprise_PageCache_Model_Cookie::COOKIE_CART是正确的方法,但是您可能需要进行一些更改。

Enterprise_PageCache_Model_Observer::registerQuoteChange在每次引用保存时都会调用(包括更改项目编号),并且在上下文中也会调用它,Mage::app()以便您可以访问所有会话数据。覆盖此观察器并添加更多数据,$this->_getCookie()->setObscure以便随时更改该值。


您可能愿意分享一些这样做的例子吗?
Nirav Sheth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.