Magento статический блок CMS в макете XML с двумя или более магазинами - PullRequest
10 голосов
/ 24 июня 2011

У меня есть два статических блока CMS, называемых «promo_en» и «promo_de» - в переводе для двух существующих представлений магазина «en» и «de».

Я хотел бы добавить их на боковую панель некоторых модулей, используя файлы layout.xml модулей.

Проблема в том, что если я добавлю их обоих, используя следующий синтаксис - они оба будут отображать игнорирование магазина, в котором я сейчас нахожусь (я бы ожидал некоторой автоматической фильтрации):

<block type="cms/block" name="Promo_de">
    <action method="setBlockId"><block_id>promo_de</block_id></action>
</block> 
<block type="cms/block" name="Promo_en">
    <action method="setBlockId"><block_id>promo_en</block_id></action>
</block> 

Если я переименую их обоих в «promo» и использую следующий синтаксис - он будет работать до тех пор, пока я не активирую кеш Magento - тогда вывод блока CMS замораживается при любом кэшированном просмотре магазина:

<block type="cms/block" name="Promo">
    <action method="setBlockId"><block_id>promo</block_id></action>
</block> 

И идеи или обходные пути по этому вопросу высоко ценятся.

Ответы [ 3 ]

27 голосов
/ 25 июня 2011

В качестве грубого обходного пути вы можете использовать макеты , характерные для каждого магазина.Например;

<STORE_de>
    <reference name="left">
        <block type="cms/block" name="Promo_de">
            <action method="setBlockId"><block_id>promo_de</block_id></action>
        </block> 
    </reference>
</STORE_de>
<STORE_en>
    <reference name="left">
        <block type="cms/block" name="Promo_en">
            <action method="setBlockId"><block_id>promo_en</block_id></action>
        </block> 
    </reference>
</STORE_en>
14 голосов
/ 26 августа 2014

Почему бы не создать статические блоки с одинаковым идентификатором, а затем включить их только в соответствующем представлении магазина?

<block type="cms/block" name="Promo">
    <action method="setBlockId"><block_id>promo</block_id></action>
</block> 

Затем создать 2 статических блока с промо-идентификатором и включить их только в представлении магазина, где они принадлежат?

3 голосов
/ 27 июня 2011

Я закончил писать свой собственный Мини-модуль, чтобы быстро решить проблему, переключая переводы в коде, основываясь на текущем коде магазина:

if( Mage::app()->getStore()->getCode() == 'de' ) 
{
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('promo_de')->toHtml();
} 
else if( Mage::app()->getStore()->getCode() == 'en' ) 
{
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('promo_en')->toHtml();
}

Я знаю, это уродливо, но время действительно было проблемой здесьЯ должен буду убрать это в будущем ...

...