Magentoでプログラムでブロックの位置を設定したい。
たとえば、ブロックの位置を次のように設定できるようにしたいと思います。
製品ビューページの「コンテンツ」の下
サイドバー内(左/右)
他のブロックの前/後。
それを行う方法を提案してください。
Magentoでプログラムでブロックの位置を設定したい。
たとえば、ブロックの位置を次のように設定できるようにしたいと思います。
製品ビューページの「コンテンツ」の下
サイドバー内(左/右)
他のブロックの前/後。
それを行う方法を提案してください。
私はこれに対する解決策を見つけました。オブザーバーを使用して、ブロック位置を動的に設定できます。まず、Observer.php
in<Namespace>/<Module>/Model
ディレクトリを作成します。このファイルに次のコードを記述します。
class <Namespace>_<Module>_Model_Observer
{
public function set_block($observer)
{
$action = $observer->getEvent()->getAction();
$fullActionName = $action->getFullActionName();
$position = 'right';
$sub_position = 'before="cart_sidebar"';
$myXml = '<reference name="'.$position.'">';
$myXml .= '<block type="obc/obc" name="obc" template="obc/obc.phtml" '.$sub_position.' />';
$myXml .= '</reference>';
$layout = $observer->getEvent()->getLayout();
if ($fullActionName=='catalog_product_view') { //set any action name here
$layout->getUpdate()->addUpdate($myXml);
$layout->generateXml();
}
}
}
次にconfig.xml
、オブザーバーを呼び出すために次の行を記述します。
<events>
<controller_action_layout_generate_blocks_before>
<observers>
<module_block_observer>
<type>singleton</type>
<class><Namespace>_<Module>_Model_Observer</class>
<method>set_block</method>
</module_block_observer>
</observers>
</controller_action_layout_generate_blocks_before>
</events>
これで、オブザーバーを使用して、ページ上の任意の場所にブロックの位置を設定できます。