Проблема с кэшем макета - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть собственный модуль, который я написал, он довольно простой ... он просто добавляет небольшой блок в нижний колонтитул для отслеживания с помощью Media Forge.Добавляемый тег зависит от того, находитесь ли вы на странице просмотра продукта или нет.Это работало здорово .... пока я не включил кеширование.Теперь, если вы очистите кэш и загрузите страницу просмотра продукта, вы получите правильный блок для страницы просмотра продукта.Если вы затем перейдете на другую страницу (например, домой), она все равно будет использовать блок страницы просмотра продукта.Если я очищаю кеш и перезагружаю домашнюю страницу, она теперь использует правильную, но если я сейчас перехожу на страницу продукта, там используется неправильная.Так что это определенно проблема с кешем, я просто не понимаю, как я должен исправить эту проблему.

Я вставлю содержимое моих файлов ниже.Я с нетерпением жду каких-либо ответов!

XML-файл макета:

<layout version="0.1.0">
    <!-- DEFAULT TAG -->
    <default>
        <reference name="footer">
            <block type="core/template" name="mediaforge_footer" as="mediaforge_footer" template="tracking/mediaforge_default.phtml"/>
        </reference>
    </default>

    <!-- PRODUCT VIEW PAGES -->
    <catalog_product_view>
        <reference name="mediaforge_footer">
            <action method="setTemplate"><template>tracking/mediaforge_product.phtml</template></action>
        </reference>
    </catalog_product_view>
</layout>

config.xml для моего пользовательского модуля:

<config>
    <modules>
        <VPS_Tracking>
            <version>0.1.0</version>
        </VPS_Tracking>
    </modules>
    <frontend>
        <layout>
            <updates>
                <vps_tracking>
                    <file>vps_tracking.xml</file>
                </vps_tracking>
            </updates>
        </layout>
    </frontend>
</config>

Добавил это в конец нижнего колонтитула.phtml:

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

Определение модуля довольно простое, а два файла шаблона mediaforge_default.phtml и mediaforge_product.phtml довольно просты, поэтому я не будупотрудитесь включить их.

Есть идеи?

1 Ответ

0 голосов
/ 21 апреля 2011

В двух словах, вам нужно определить ключ кеша для вашего блока, что означает, что вам нужно использовать что-то другое, чем Mage_Core_Block_Template. Когда вы создаете свой собственный блок, добавьте его в конструктор:

protected function _construct() {
    $this->addData(array(
        'cache_lifetime' => 3600,
        'cache_key'      => $this->someMethodToDifferentiatePages(),
    ));
}

Этот последний метод должен возвращать разные строки для каждого варианта использования блока (например, один для страниц каталога, один для «другого», если это все, что вам нужно). Это скажет Magento, какую кэшированную версию использовать

Надеюсь, это поможет!

Спасибо, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...