私が見る限り、問題は「デフォルト」のレイアウトハンドルでブロックを指定し、「コンテンツ」ブロックのほとんどのコンテンツは後で適用される他のレイアウトハンドルによって追加されることです。そのため、XML登録ファイル(Fabianによって言及されている)に追加された依存関係は役に立ちません。
ニーズに応じて、次の2つのオプションを検討してください。
1.本当にすべてのフロントエンドページにブロックを含めたい場合
XMLレイアウトファイル(local.xmlまたはカスタムファイル)に、新しいレイアウトハンドルを追加します。
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<!-- your other adjustments for default, category_product_view and so on go here -->
<add_my_block>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</add_my_block>
</layout>
次に、イベントオブザーバーを作成して、レイアウトハンドルをレイアウトに挿入します。
<?php
class YourCompany_YourExtension_Model_Observer
{
/**
* Adds a block at the end of the content block.
*
* Uses the event 'controller_action_layout_load_before'.
*
* @param Varien_Event_Observer $observer
* @return YourCompany_YourExtension_Model_Observer
*/
public function addBlockAtEndOfMainContent(Varien_Event_Observer $observer)
{
$layout = $observer->getEvent()->getLayout()->getUpdate();
$layout->addHandle('add_my_block');
return $this;
}
}
次に、イベントオブザーバーをXML拡張構成ファイル(config.xml)に登録します。
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<modules>
<YourCompany_YourExtension>
<version>0.0.1</version>
</YourCompany_YourExtension>
</modules>
<frontend>
<events>
<controller_action_layout_load_before>
<observers>
<mymod_add_block_at_end_of_main_content>
<type>singleton</type>
<class>mymod/observer</class>
<method>addBlockAtEndOfMainContent</method>
</mymod_add_block_at_end_of_main_content>
</observers>
</controller_action_layout_load_before>
</events>
<!-- declaring your layout xml etc. -->
</frontend>
<global>
<!-- declaring your block classes etc. -->
<models>
<mymod>
<class>YourCompany_YourExtension_Model</class>
</mymod>
</models>
</global>
</config>
これで、ブロックは他のブロックの下に配置されます。ホームページ、顧客ログインページ、カテゴリビューページでこれを正常にテストしました。いくつかのページでブロックを除外する必要がある場合は、その特定のページでブロックを除外する必要があるかどうかをイベントオブザーバーで確認できます。
2.一部のページにのみブロックを含めたい場合
以前と同じようにXMLレイアウトファイルにレイアウトハンドルを追加しますが、イベントオブザーバーを作成して登録する代わりに、一部の領域でカスタムレイアウトハンドルを使用するようにXMLレイアウトファイルに指示します。
<?xml version="1.0" encoding="UTF-8"?>
<layout version="0.1.0">
<catalog_category_default>
<update handle="add_my_block" />
</catalog_category_default>
<catalog_category_layered>
<update handle="add_my_block" />
</catalog_category_layered>
<cms_page>
<update handle="add_my_block" />
</cms_page>
<!-- and so on -->
<add_my_block>
<reference name="content">
<block type="mymod/blockname" name="myblockname" after="-" template="mymod/block.phtml"/>
</reference>
</add_my_block>
</layout>