私は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
助言がありますか?
_getIdentifier
て、ブロックが顧客のカートに固有であるようにしてください。