Невозможно предотвратить кэширование блока Magento - PullRequest
6 голосов
/ 05 февраля 2012

Я работаю над сайтом Magento 1.6, на котором в поле CMS «Layout Update XML» домашней страницы есть следующий xml:

<reference name="content">
   <block type="catalog/navigation" name="catalog.category.home" as="homecategory" template="catalog/category/homecategory.phtml" />
</reference>

Поскольку шаблон показывает рандомизированные категории, я бы хотелотключить кеширование для этого блока.Для этого я попытался использовать getChildHtml («sub-block-template», false) со следующим:

(домашняя категория имеет $ this-> getChildHtml ('random_categories', false) в его шаблоне)

<reference name="content">
    <block type="catalog/navigation" name="catalog.category.home" as="homecategory" useCache="false" template="catalog/category/homecategory.phtml">
        <block type="catalog/navigation" name="catalog.category.home.randcats" as="random_categories"  useCache="false" template="catalog/category/random.phtml" />
    </block>
</reference>

Так что теперь я застрял, удивляясь, почему я не могу предотвратить кэширование этого блока, несмотря на использование аргумента 'false'.

Ответы [ 2 ]

6 голосов
/ 11 мая 2014

У меня была такая же проблема. Я считаю, что это связано с типом блока type = "catalog / navigation". Я видел отключение кеширования на других типах блоков. Вот исправление для этого типа блока и этой проблемы:

Изменение файла phtml: Убедитесь, что второй параметр имеет значение false

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

Изменение файла xml: Добавьте эти действия в блок

<block type="catalog/navigation" name="topCategoriesList" as="topCategoriesList"    template="catalog/navigation/categorylist.phtml">
   <action method="unsetData"><key>cache_lifetime</key></action>
   <action method="unsetData"><key>cache_tags</key></action>
</block>
3 голосов
/ 05 февраля 2012

Вы пытались форсировать его, создавая новый тип блока и перегружая функции кэширования?Расширьте класс Mage_Catalog_Block_Product_List_Random и создайте пустой псевдо-конструктор:

protected function _construct() {}

Это предотвратит наследование добавления тегов кэша, времени жизни и других метаданных к объекту блока.Затем вы также можете перегрузить информацию о ключе кэша, чтобы он не использовал существующие (или включенные) блоки кэша.Например:

public function getCacheKeyInfo()
{
    return array(
        'MY_CACHE_TAG',
        Mage::app()->getStore()->getId(),
        (int)Mage::app()->getStore()->isCurrentlySecure(),
        Mage::getDesign()->getPackageName(),
        Mage::getDesign()->getTheme('template')
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...