Как исключить блок из Mirasvit FPC

Как исключить блок из Mirasvit FPC

При разработке проектов на Magento 1, которые используют для кеширования модуль от Mirasvit, часто бывает необходимо исключить часть страницы из кеша. Сделать “дырку”, внутри которой ваш код на php будет отрабатывать при каждом обновлении страницы. Это достаточно несложно, для достижения нужного результата достаточно поправить код в 3-х файлах и создать один новый файл. В качестве примера, давайте сделаем не кешируемым кусок кода из файла page/html/header.phtml, а точнее - количество товаров в wish-листе пользователя.

Как исключить часть страницы из кеша Mirasvit Full Page Cache?

Мы внесем коррективы в три существующих файла:

  1. app/code/local/Mirasvit/Fpc/etc/custom.xml
  2. app/design/frontend/[package]/[theme]/layout/local.xml
  3. app/design/frontend/[package]/[theme]/template/page/html/header.phtml

И создадим один новый файл с нужной нам логикой:

  1. app/design/frontend/[package]/[theme]/template/page/html/actual_wishlist.phtml

Шаг 1

В файле “Mirasvit/Fpc/etc/custom.xml” нам необходимо добавить описание того, какой блок мы будем исключать. Для этого в узле “<containers>” мы добавим свою ноду с уникальным именем. Результат работы будет выглядеть приблизительно так:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <containers>
        <core_template_actual_wishlist>
            <block>core/template</block>
            <name>actual_wishlist</name>
            <container>Mirasvit_Fpc_Model_Container_Base</container>
            <depends></depends>
            <in_app>false</in_app>
        </core_template_actual_wishlist>
        ...
    </containers>
</config>

Шаг 2

В “local.xml” файле вашей темы нам необходимо указать какой блок мы хотим подгрузить в референс "header". У нас не будет собственного обработчика шаблона - мы будем использовать "core/template". Нам нужно нечто подобное:

<?xml version="1.0"?>
<layout>
    <default>
        <reference name="header">
            <block type="core/template" 
                   name="actual_wishlist" 
                   template="page/html/actual_wishlist.phtml" />
        </reference>
        ...
    </default>
</layout>

Шаг 3

В файле “header.phtml”, из соответствующей темы, нам надо в нужном месте обеспечить вывод нашего шаблона указанного ранее в “local.xml”. Просто добавляем куда надо вот эту строку:

<?php echo $this->getChildHtml('actual_wishlist') ?>

Шаг 4

В заключении, нам нужно реализовать какую-то логику во вновь созданном шаблоне “actual_wishlist.phtml” нашей темы. Мы не будем заморачиваться и выведем там количество элементов “wishlist” для залогиненного пользователя. Все просто:

<?php
$count = 0;
if (Mage::getSingleton('customer/session')->isLoggedIn()) {
    $count = Mage::getSingleton('customer/session')->getWishlistItemCount();
}
?>
<span><?php echo $count; ?></span>

Чтобы все заработало, финальным аккордом нашей работы будет очистка кеша в двух местах при помощи следующих команд:

rm -rf var/cache/*
rm -rf var/cache_fpc/*

Обновляем страницу и смотрим на результат.

Чтобы быть абсолютно уверенным, что наш блок не кешируется Mirasvit Full Page Cache, давайте включим в админке подсветку не кешируемых блоков. Для этого нам надо перейти по адресу “System->Full Page Cache->Settings->Debug”  выставить значение “Enable Debug Hints” в “Yes”. После очистки кеша и обновления страницы, её части не попавшие в кеш будут подсвечены розовым цветом.

Более развернутую информацию вы можете почерпнуть на английском языке здесь: https://mirasvit.com/doc/extension_fpc/current/configuration/dynamic_block