Відпустка заголовка в магазині magento


10

Я реалізував отверстие заголовка в 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

Будь-які пропозиції?


Не впевнений, але я вважаю, що це питання більше стосується переповнення стека, але не цього сайту ...
Сергій Гук

2
Схоже, що тут голепунчінг використовується в нетрадиційному розумінні, чи можете ви пояснити функцію, яку ви намагаєтеся реалізувати, не використовуючи жаргон?
Ральф Тіс

1
Чому б не додати ідентифікатор кошика клієнтів, щоб _getIdentifierблок був унікальним для кошика клієнтів або навіть кількості предметів у їх кошику?
B00MER

@SergeiGuk Добре це пов’язано з Magento
j0k

@RalphTice Я намагаюся застосувати показник значення кошика у заголовку, який показує користувачеві скільки предметів у кошику. Оскільки це значення різне для користувача, я не хочу, щоб воно було кешоване.
Нірав Шет

Відповіді:


3

Використання Enterprise_PageCache_Model_Cookie::COOKIE_CART- це правильний шлях, але, можливо, вам доведеться внести деякі зміни.

Enterprise_PageCache_Model_Observer::registerQuoteChangeвикликається кожним збереженням цитат (включена зміна номера елемента), а також викликається в контексті, Mage::app()щоб ви могли отримати доступ до всіх даних сеансу. Перезапишіть цього спостерігача і додайте більше даних, $this->_getCookie()->setObscureщоб значення змінювалось коли потрібно.


Якимись прикладами ви могли б поділитися, роблячи це?
Нірав Шет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.