私はマジェントでヘッダーのホールパンチングを実装しました。顧客ごとに機能するようになりましたが、差分カートのアイテム数でも機能させることで、これを 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()
.
カートのオブザーバーが一貫していないことがわかりました。さらに、更新の場合はイベントがディスパッチされますが、削除の場合はディスパッチされません。それで、オブザーバーを持つことに一貫性がある場合、私はオブザーバーを何らかの形で見積もりの価格更新に追加できると思いますか?
助言がありますか?