Отключить/обход 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", но это единственный способ, которым я нашел его преодоление.