Я реалізував отверстие заголовка в 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, полягає в тому, що додаток Mage не ініціалізується, коли кеш FPC обслуговує запит, тому в основному метод додавання атрибута заповнювача не може працювати, оскільки
Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
не буде працювати, правда?
І хоч як це має бути, але, здавалося, це не працює, як я die()
подзвонив туди, але нічого не сталося.
То чого мені не вистачає? І як я можу отримати кількість елементів кошика, щоб їх можна було використовувати для створення ідентифікатора кешу?
Хід: я знайшов
Enterprise_PageCache_Model_Cookie::COOKIE_CART
але це змінюється лише один раз після оновлення кошика. Після цього він залишається таким же. Це дивно, це виглядає як рішення, але його поведінка говорить інакше.
У сесії я також не міг знайти кількість елементів кошика. Тому єдиний спосіб, який я зараз бачу це зробити, - це збереження кількості кошика в сеансі кожного разу, коли він оновлюється, а потім використовувати це в _getIdentifier()
.
Я виявив, що спостерігачі несуперечливі для воза. Крім того, оновлення подій відправляється, але для їх видалення це не відбувається. Тож я думаю, я можу додати свого спостерігача до оновлення ціни цитати якось, якщо це відповідає наявності спостерігачів?
Крім того, я читав недійсність кеш-пам’яті повних сторінок у кошику (цитата), але використовує itt-обробку, використовуючи
Enterprise_PageCache_Model_Cookie::COOKIE_CART
що в моєму випадку не працює, хоча я думаю, що проблема полягає в цьому. Що як? Я не впевнений.
Також у поточній версії EE, у якій ми працюємо, навіть немає папки Advanced
Model/Container
. я використовуюEE 1.10.1.1
Будь-які пропозиції?
_getIdentifier
блок був унікальним для кошика клієнтів або навіть кількості предметів у їх кошику?