Статический блок CMS Magento в XML-макете с двумя или более магазинами
У меня есть два статических блока 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>
И идеи или обходные пути по этому вопросу высоко ценятся.
Ответы
Ответ 1
В конце концов я написал свой собственный мини-модуль, чтобы быстро устранить проблему, переключив переводы в коде на основе текущего кода хранилища:
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();
}
Я знаю, что это уродливо, но время действительно было проблемой, и мне нужно будет очистить это в будущем...
Ответ 2
В качестве грубого обходного пути вы можете использовать макеты дескрипторов, специфичные для каждого магазина. Например:
<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>
Ответ 3
Почему бы не создать статические блоки с тем же идентификатором, а затем включить их только в соответствующее хранилище?
<block type="cms/block" name="Promo">
<action method="setBlockId"><block_id>promo</block_id></action>
</block>
Затем создайте 2 статических блока с промоутером идентификатора и включите их только в storeview, где они принадлежат?