Как я могу отключить кеш для определенного раздела или блока


31

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

Это меня огорчает: '(

Я знаю, что это происходит из-за кеша. Есть ли что-нибудь, что я могу отключить кеш только для этого раздела? Я попытался отключить блочный html-кеш и проверить, что теперь он работает отлично, но я обнаружил, что при отключенном блоке HTML у категории не было определенных проблем.


2
Вы решили свою проблему? Как? Пожалуйста, поделитесь подробностями с нами. Благодарность!
Фабиан Блехшмидт

Ответы:


32

Можешь попробовать

    <reference name="needed block">
        <action method="setCacheLifetime"><s>null</s></action>
    </reference>

или

    <reference name="needed block">
        <action method="setCacheLifetime" />
    </reference>

установить его на ноль.

Но, вероятно, лучше использовать AJAX.

Есть хорошая статья nullили 0смыслhttp://blog.kyp.fr/make-a-clean-sweep-of-commons-magento-cache_lifetime-workarounds-usage-in-cache-block-policy/ (ссылка не работает)


хм использование ajax может решить проблему. Я попробую это спасибо за вашу помощь.
Рависони

2
Я думал null= никогда не кэшировать и 0= кэшировать постоянно?
отметки

1
null= никогда не кешировать, верно. Однако я не уверен, что можно аргументировать значение с nullпомощью <action>директивы.
Дмитрий Завалкин

2
<action method="setCacheLifetime"><s>null</s></action>работал на меня. TNX!
рутер

6
Установка времени жизни кэша в «0» не отключает кэш. Только «ноль» отключит его!
Анна Фёлькл

9

Вы можете отключить кеш в getChildHtml (). Вот как выглядит подпись:

public function getChildHtml($name = '', $useCache = true, $sorted = false)

Это должно сделать трюк:

echo $this->getChildHtml('block', false);

я попробовал это .. на самом деле это закодировано в top.phtml это не работает в этом случае
ravisoni

Это также может быть кэшировано, так что я думаю, что это не будет иметь большого эффекта. Есть ли шанс, что вы можете вытащить его за пределы этой части? Я не думаю, что есть какие-либо другие варианты ...
Рик Кейперс

9

В конкретном XML-файле. Скажи catalog.xml

В этом для конкретного эталонного блока В этом блоке установите действие ограничения кеша равным нулю

Пример каталога.xml

<reference name="right">
    <block type="catalog/navigation" name="catalog.product.cat.related" as="related_cat" template="catalog/navigation/list_cat.phtml" after="-" >
        <action method="unsetData"><key>cache_lifetime</key></action>
        <action method="unsetData"><key>cache_tags</key></action>
    </block>
</reference>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.