我有两个名为" promo_en"的静态CMS块。和" 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>
如果我将它们重命名为&#34; promo&#34;并使用以下语法 - 它可以正常工作,直到我激活Magento的缓存 - 然后CMS块的输出冻结在任何存储视图首先缓存:
<block type="cms/block" name="Promo">
<action method="setBlockId"><block_id>promo</block_id></action>
</block>
对此问题的想法或解决方法表示高度赞赏。
答案 0 :(得分:27)
作为一种粗略的解决方法,您可以使用每个商店特定的layout handles。例如;
<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>
答案 1 :(得分:14)
为什么不创建具有相同标识符的静态块,然后只在相应的商店视图中启用它们?
<block type="cms/block" name="Promo">
<action method="setBlockId"><block_id>promo</block_id></action>
</block>
然后创建2个带有标识符促销的静态块,并仅在它们所属的storeview中启用它们?
答案 2 :(得分:3)
我最终编写了自己的迷你模块来快速解决问题,根据当前的商店代码切换代码中的翻译:
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();
}
我知道这很难看,但时间确实是个问题,我将来必须清理它...