「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>
そして、この問題に関するアイデアや回避策は高く評価されています。
問題をすばやく修正するために独自のミニモジュールを作成し、現在のストアコードに基づいてコードの翻訳を切り替えました。
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();
}
醜いことはわかっていますが、ここでは時間が本当に問題でした。将来、これをクリーンアップする必要があります...
大まかな回避策として、各ストアに固有の レイアウトハンドル を使用できます。例えば;
<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>
同じ識別子で静的ブロックを作成し、対応するストアビューでのみ有効にしてみませんか?
<block type="cms/block" name="Promo">
<action method="setBlockId"><block_id>promo</block_id></action>
</block>
次に、識別子promoを使用して2つの静的ブロックを作成し、それらが属するストアビューでのみ有効にしますか?