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

bac*_*iwi 10 layout block cache-control magento content-management-system

我有两个名为"promo_en"和"promo_de"的静态CMS块 - 翻译为现有的两个店铺视图"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> 
Run Code Online (Sandbox Code Playgroud)

如果我将它们重命名为"promo"并使用以下语法 - 它可以正常工作,直到我激活Magento的缓存 - 然后CMS块的输出冻结在任何存储视图首先缓存:

<block type="cms/block" name="Promo">
    <action method="setBlockId"><block_id>promo</block_id></action>
</block> 
Run Code Online (Sandbox Code Playgroud)

关于此事的想法或解决方法受到高度赞赏.

clo*_*eek 27

作为一种粗略的解决方法,您可以使用特定于每个商店的布局句柄.例如;

<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>
Run Code Online (Sandbox Code Playgroud)


小智 14

为什么不创建具有相同标识符的静态块,然后只在相应的商店视图中启用它们?

<block type="cms/block" name="Promo">
    <action method="setBlockId"><block_id>promo</block_id></action>
</block> 
Run Code Online (Sandbox Code Playgroud)

然后创建2个带有标识符促销的静态块,并仅在它们所属的storeview中启用它们?


bac*_*iwi 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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 干净的方法似乎是马修建议的主题覆盖 - 在使用这个解决方案之前你应该看看它,这只不过是一个快速修复...... (2认同)