0

Magentoでプログラムでブロックの位置を設定したい。

たとえば、ブロックの位置を次のように設定できるようにしたいと思います。

  1. 製品ビューページの「コンテンツ」の下

  2. サイドバー内(左/右)

  3. 他のブロックの前/後。

それを行う方法を提案してください。

4

1 に答える 1

0

私はこれに対する解決策を見つけました。オブザーバーを使用して、ブロック位置を動的に設定できます。まず、Observer.phpin<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>

これで、オブザーバーを使用して、ページ上の任意の場所にブロックの位置を設定できます。

于 2013-04-01T09:22:44.297 に答える