Это событие будет запущено независимо от того, включена ли FPC

му во время одного из наших недавних запусков у нас было много событий, за которыми мы наблюдали, таких как controller_action_predispatch. Как только сайт заработал, мы начали замечать, что наших наблюдателей никогда не вызывали. После небольшого исследования один из наших разработчиков нашел этот блок кода в Mage_Core_Model_App около строки 292.

if ($this->_cache->processRequest()) {
            $this->getResponse()->sendResponse();
        } else {
            $this->_initModules();
            $this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);

            if ($this->_config->isLocalConfigLoaded()) {
                $this->_initCurrentStore($scopeCode, $scopeType);
                $this->_initRequest();
                Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
            }

            $this->getFrontController()->dispatch();
        }

Как вы можете видеть, если $ this -> _ cache-> processRequest () верно, то есть, когда полный кеш страниц включен, вы никогда не попадете в рассылку. Разработчик нашел http_response_send_before, который получает вызов в любом случае, но мне кажется, что это ошибка, или вы никогда не должны использовать эти события диспетчеризации для чего-либо, если у вас включено кэширование на полную страницу. есть идеи?

Ответы на вопрос(1)

Решение Вопроса

я бы назвал это «работает как задумано». Хотя может быть немного странно не запускать некоторые события, им пришлось выбирать линию, и это имеет смысл для меня, тем более что контроллер никогда не отправляется.

Вы должны использовать эти события диспетчеризации для всего, что влияет на страницу (поскольку она все еще должна быть сгенерирована), но если вы используете ее для отслеживания и тому подобное, нет, это не будет уместно.

 Joseph Mastey19 янв. 2011 г., 15:21
Это легко проверить, но я бы сказал, что это событие не отправляется.
 clockworkgeek19 янв. 2011 г., 16:04
В зависимости от версии полное кэширование страницы доступно только для "посетителей без сеансов". Наличие товаров в корзине подразумевает сеанс.
 dan.codes19 янв. 2011 г., 15:24
да, я только что проверил, и есть смысл, что они не будут заполнять всю страницу кэшировать корзину, и не похоже, что это делать Он попал на мое мероприятие каждый раз. Очевидно, что вы не можете кэшировать корзину и оформить заказ из-за данных, которые вводятся для каждого пользователя и изменяются
 dan.codes19 янв. 2011 г., 15:16
Я вижу, что вы говорите, очевидно, если у них есть кэш и они могут отобразить страницу, тогда не проходите весь путь отправки. Мы использовали его для параметров в URL. Похоже, мы просто воспользуемся этим другим. Знаете ли вы, будет ли это верно для страницы корзины и страниц оформления заказа. У меня есть другой проект, где я делаю что-то с controller_action_predispatch_checkout_cart_index, и было бы плохо, чтобы найти другой путь. Я удаляю что-то из сессии

Ваш ответ на вопрос