magentoストアでのヘッダーのホールパンチング


10

私はmagentoにヘッダーのホールパンチングを実装しました。顧客ごとにヘッダーを機能させていても、異なるカートアイテムの数でも機能させることで、このレベルを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

しかし、これはカートの更新時に一度だけ変更されます。その後は同じままです。これは奇妙です、これは解決策のように感じますが、その動作は別のことを言っています。

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

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

また、カート(見積もり)の変更時にフルページキャッシュの無効化を読み ましたが、

Enterprise_PageCache_Model_Cookie::COOKIE_CART

私の場合はうまくいきませんが、問題はその中にあると思います。何/方法?私はわかりません。

また、現在実行しているEEのバージョンには、下にAdvancedフォルダーさえありませんModel/Container。私は使っているEE 1.10.1.1

助言がありますか?


よくわかりませんが、この質問はスタックオーバーフローに関連していると思いますが、このサイトには関連していません...
Sergei Guk

2
ホールパンチングはここでは非伝統的な意味で使用されているようですが、専門用語を使用せずに実装しようとしている機能を説明できますか?
Ralph Tice 2013年

1
顧客のカートIDをに追加し_getIdentifierて、ブロックが顧客のカートに固有であるようにしてください。
B00MER 2013年

@SergeiGukまあ、それはMagentoに深く関連しています
j0k

@RalphTiceヘッダーにカート値インジケーターを実装して、ユーザーがカートに何個の商品を持っているかを示します。その値はユーザーごとに異なるため、キャッシュされたくありません。
Nirav Sheth 2013

回答:


3

使用するのEnterprise_PageCache_Model_Cookie::COOKIE_CARTが正しい方法ですが、変更が必要になる場合があります。

Enterprise_PageCache_Model_Observer::registerQuoteChangeすべての見積保存時に呼び出され(項目番号の変更が含まれます)、Mage::app()すべてのセッションデータにアクセスできるようにコンテキストでも呼び出されます。このオブザーバーを上書きし、データを追加し$this->_getCookie()->setObscureて、必要に応じて値を変更します。


これを行う際に共有したいと思う例はありますか?
Nirav Sheth 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.