具有两个或更多存储视图的XML布局中的Magento静态CMS块

时间:2011-06-24 15:55:12

标签: layout magento content-management-system block cache-control

我有两个名为" 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> 

对此问题的想法或解决方法表示高度赞赏。

3 个答案:

答案 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();
}

我知道这很难看,但时间确实是个问题,我将来必须清理它...