XML-тег для добавления массива в тег кэша для файла макета
Поскольку magento1.9.2 добавлена функция cachetags в функцию construct
, я должен указать отдельные теги кэша для каждого элемента блока, потому что его конфликт с лаком для чтения ключа. я решил эту проблему в файле.phtml, чтобы установить ключ, как показано ниже
$this->getLayout()->createBlock('cms/block','',
array(
'cache_lifetime' => false,
'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG."_twocmspages")
))->setBlockId("twocmspages")->toHtml();
Но если нужно назначить то же самое cache_tags
, используя xml с setMethod
, как я могу это сделать.
<block type="cms/block" name="block_id">
... set cachetag here
</block>
Есть ли у кого-нибудь идея, как добавить cache_tag array
документ из XML?
Ваша помощь будет оценена здесь по достоинству.
2 answers
Аргументы в <action>
могут быть определены как вложенные элементы и будут преобразованы в массив:
<block type="cms/block" name="block_id">
<action method="setTags">
<tags>
<tag1>cms_block_twocmspages</tag1>
<tag2>( just in case you want to add more tags )</tag2>
</tags>
</action>
</block>
Следует отметить, что <tag1>
и <tag2>
будут ключами массива, поэтому вы не можете использовать одно и то же имя тега и не можете передавать массивы с числовыми индексами, потому что теги XML не могут быть числами.
Более гибким решением является использование JSON. Просто укажите, какой аргумент следует анализировать как JSON с атрибутом json
<action>
:
<block type="cms/block" name="block_id">
<action method="setTags" json="tags">
<tags>["cms_block_twocmspages"]</tags>
</action>
</block>
Не уверен, что вы можете сделать это прямо из макета, но вы можете сделать трюк.
Все параметры, которые вы передаете тегу <action>
, могут быть получены от помощника.
Что-то вроде этого:
<block type="something/here" name="some_name">
<action method="setSomething">
<something helper="module/getSomething" />
</action>
</block>
Это означает, что метод setSomething
из блока something/here
будет вызван и получит в качестве параметра результат Mage::helper('module')->getSomething()
.
Таким образом, вы можете попробовать то же самое для своего кода:
<block type="cms/block" name="block_id">
<action method="setCacheTags">
<tags helper="modulename/getBlockTags" />
</action>
</block>
Теперь просто реализуйте метод getBlockTags()
в помощнике Namespace_Modulename_Helper_Data
, который возвращает массив с ваши метки.
Если вы не хотите добавлять метод в помощник с именем Data
, допустим, вы добавляете его в помощник Namespace_Modulename_Helper_Something
, вам нужен тег tags
вот так:
<tags helper="modulename/something/getBlockTags" />