web-dev-qa-db-ja.com

2つ以上のストアビューを持つXMLレイアウトのMagento静的CMSブロック

「promo_en」と「promo_de」という2つの静的CMSブロックがあります。これは、2つの既存のストアビュー「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> 

そして、この問題に関するアイデアや回避策は高く評価されています。

10
backyardKiwi

問題をすばやく修正するために独自のミニモジュールを作成し、現在のストアコードに基づいてコードの翻訳を切り替えました。

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

醜いことはわかっていますが、ここでは時間が本当に問題でした。将来、これをクリーンアップする必要があります...

3
backyardKiwi

大まかな回避策として、各ストアに固有の レイアウトハンドル を使用できます。例えば;

<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>
27
clockworkgeek

同じ識別子で静的ブロックを作成し、対応するストアビューでのみ有効にしてみませんか?

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

次に、識別子promoを使用して2つの静的ブロックを作成し、それらが属するストアビューでのみ有効にしますか?