Holepunching заголовка в магазине magento
Я реализовал прокрутку заголовка в 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 обслуживает запрос, поэтому в принципе метод добавления атрибута placeholder не может работать, поскольку Mage::helper( 'checkout/cart' )->getCart()->getItemsCount();
выиграл Не работайте, правильно?
И хотя, как это должно быть, но это, казалось, не запускалось вообще, как я разместил там вызов die()
, но ничего не произошло.
Так что мне не хватает? И как я могу получить подсчет пунктов корзины, чтобы его можно было использовать для создания идентификатора кеша?
Прогресс: я нашел Enterprise_PageCache_Model_Cookie::COOKIE_CART
, но это изменяется только один раз при обновлении корзины. После этого он остается таким же. Это странно, это похоже на решение, но его поведение говорит иначе.
Я не мог найти счетчик предметов в сеансе. Таким образом, единственный способ, который я сейчас вижу, это сохранить количество корзины в сеансе всякий раз, когда он будет обновляться, а затем использовать его в _getIdentifier()
.
Я обнаружил, что наблюдатели непоследовательны для телеги. Для добавления, обновления событий отправляются, но для удаления это не так. Так что, я думаю, я могу добавить своего наблюдателя к ценообразованию цитаты каким-то образом, если это согласуется с наличием наблюдателей?
Любые предложения?
Ответы
Ответ 1
См. мой аналогичный вопрос: Недействительность полного кэша страницы при изменении корзины
Я отказался от реализации, потому что это было невозможно в моем случае, но я бы вникнул в Enterprise_PageCache_Model_Container_Advanced_Quote
далее, поскольку он, кажется, используется блоком корзины для обновления самого себя в случае изменения содержимого цитаты
Ответ 2
Я подозреваю, что ваша идея сохранить это на сеансе действительно действительно хорошая и, скорее всего, будет надежно работать