Подтвердить что ты не робот

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().

Я обнаружил, что наблюдатели непоследовательны для телеги. Для добавления, обновления событий отправляются, но для удаления это не так. Так что, я думаю, я могу добавить своего наблюдателя к ценообразованию цитаты каким-то образом, если это согласуется с наличием наблюдателей?

Любые предложения?

4b9b3361

Ответ 1

См. мой аналогичный вопрос: Недействительность полного кэша страницы при изменении корзины

Я отказался от реализации, потому что это было невозможно в моем случае, но я бы вникнул в Enterprise_PageCache_Model_Container_Advanced_Quote далее, поскольку он, кажется, используется блоком корзины для обновления самого себя в случае изменения содержимого цитаты

Ответ 2

Я подозреваю, что ваша идея сохранить это на сеансе действительно действительно хорошая и, скорее всего, будет надежно работать