11

私はマジェントでヘッダーのホールパンチングを実装しました。顧客ごとに機能するようになりましたが、差分カートのアイテム数でも機能させることで、これを 1 レベル深くする機能が必要です。

これが私のコードです。

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たが、これはカートの更新時に 1 回だけ変更されます。その後はそのままです。これは奇妙です。これは解決策のように感じますが、その動作はそうではありません。

セッションでカートのアイテム数も見つかりませんでした。したがって、現在これを行う唯一の方法は、カートの数量が更新されるたびにセッションに保存し、_getIdentifier().

カートのオブザーバーが一貫していないことがわかりました。さらに、更新の場合はイベントがディスパッチされますが、削除の場合はディスパッチされません。それで、オブザーバーを持つことに一貫性がある場合、私はオブザーバーを何らかの形で見積もりの​​価格更新に追加できると思いますか?

助言がありますか?

4

2 に答える 2

0

これをセッションに保存するというあなたのアイデアは実際には本当に良いものであり、確実に機能する可能性が高いと思います

于 2013-03-04T16:30:32.077 に答える
0

私の同様の質問を参照してください:カート (見積もり) 変更時のフル ページ キャッシュの無効化

私の場合は無理だったので実装を断念しましたがEnterprise_PageCache_Model_Container_Advanced_Quote、カートブロックが見積内容の変更時に自身をリフレッシュするために利用されているようですので、さらに掘り下げてみたいと思います

于 2013-01-17T22:04:41.793 に答える