Отключить/обход Magento Полный кэш страницы на одной странице

Как отключить или обойти FPC для одной страницы? Я не хочу использовать дырокол, так как на странице есть несколько блоков, которые мне нужны, чтобы быть динамичными, и я бы предпочел изменить один config/class, чтобы указать, что вся страница не должна кэшироваться (аналогично поведению проверки).

Мое понимание FPC заключалось в том, что он не использовался для "пользователей сеанса" (вход в систему, добавление в корзину и т.д.). Тем не менее, я вижу, что FPC влияет на страницы, когда пользователь вошел в систему. Если я отключу FPC, страница будет работать по желанию.

Ответ 1

Вот решение для отключения FPC для конкретного контроллера (может также быть распространено на определенное действие).

Сначала создайте Observer для прослушивания события controller_action_predispatch:

public function processPreDispatch(Varien_Event_Observer $observer)
{
    $action = $observer->getEvent()->getControllerAction();

    // Check to see if $action is a Product controller
    if ($action instanceof Mage_Catalog_ProductController) {
        $cache = Mage::app()->getCacheInstance();

        // Tell Magento to 'ban' the use of FPC for this request
        $cache->banUse('full_page');
    }
}

Затем добавьте следующее в ваш файл config.xml для модуля. Это относится к разделу <frontend>:

<events>
    <controller_action_predispatch>
        <observers>
            <YOUR_UNIQUE_IDENTIFIER>
                <class>YOURMODULE/observer</class>
                <method>processPreDispatch</method>
            </YOUR_UNIQUE_IDENTIFIER>
        </observers>
    </controller_action_predispatch>
</events>

Теперь Magento будет обслуживать вашу страницу каждый раз и обходить FPC для запроса.

Ответ 2

Только что закончилась борьба с Magento EE FPC, не отображающая основные сообщения на кэшированных страницах CMS. Основные сообщения отлично работали в категориях кеша и страницах продукта, но не на страницах CMS. Я обнаружил, передав определенный параметр странице, которую вы можете заставить эти страницы генерировать вместо сервера из кеша.

найдено в: app/code/core/Enterprise/PageCache/Model/Processor/Default.php

/**
 * Disable cache for url with next GET params
 *
 * @var array
 */
protected $_noCacheGetParams = array('___store', '___from_store');

Таким образом, можно создать ссылку, содержащую строку запроса HTTP GET, которая будет обходить FPC.

http://www.domain.com/?___store

Это помогло решить проблему, с которой я столкнулся, поскольку плагин перенаправлял ссылающийся URL-адрес с помощью сеансового сообщения, но если реферрером была страница CMS, сообщение не будет отображаться до тех пор, пока не будет просмотрена страница, отличная от CMS.

Ответ 3

Magento FPC - один сложный зверь.

Я преодолел это, используя следующий учебник:

http://oggettoweb.com/blog/customizations-compatible-magento-full-page-cache/

Это может быть то, что вы называете "Hole Punching", но это единственный способ, которым я нашел его преодоление.