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 回答