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?

Ваша помощь будет оценена здесь по достоинству.

Author: liyakat, 2015-07-22

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>
 4
Author: Fabian Schmengler, 2015-07-22 14:47:24

Не уверен, что вы можете сделать это прямо из макета, но вы можете сделать трюк.
Все параметры, которые вы передаете тегу <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" />
 2
Author: Marius, 2015-07-22 14:47:42