如何在magento中注入新块

时间:2012-12-28 04:53:47

标签: magento magento-1.7

我正在研究自定义模块,并尝试在加载时将cms块上的自定义模块块代码嵌入。我的代码是:

{{block type="module/block_name" categories="2,4,3" template="catalog/product/list.phtml" }}

这在cms阻止页面上运行。但我试图在运行时嵌入块代码。为此我创建了一个事件

 <events>
     <controller_action_layout_generate_blocks_before>
          <observers>
              <mypage>
                       <type>singleton</type>
                       <class>Module_Model_Observer</class>
                       <method>addlisttocms</method>
                </mypage>
         </observers>
     </controller_action_layout_generate_blocks_before>
</events> 

在观察者身上我创建了函数:

public function addlisttocms(Varien_Event_Observer $observer)
    {
     $controller = Mage::app()->getRequest()->getControllerName();
     $layout = Mage::app()->getRequest()->getRouteName();
     $var = Mage::app()->getRequest()->getActionName();
     $page =  Mage::app()->getRequest()->getParam('page_id');
}

现在我希望当cms页面加载时,我使用上面的函数嵌入我的块。有可能吗?

2 个答案:

答案 0 :(得分:2)

使用布局XML或自定义小部件来执行此操作。

自定义模块布局XML文件:

<cms_page_view>
    <block name="some.block" type="module/block_name" parent="content" template="catalog/product/list.phtml">
        <action method="setCategories">
            <ids>2,3,4</ids>
        </action>
    </block>
</cms_page_view>

答案 1 :(得分:1)

我将我的answer.change事件发送到'controller_action_layout_generate_xml_before'并在观察者注入代码中输入

  $layout = $observer->getLayout();
 $layout->getUpdate()->addUpdate('<reference name="content"> 
    <block name="mymodule" type="mymodule/blockname"  template="catalog/product/list.phtml">
        <action method="setCategories">
            <ids>2,3,4</ids>
        </action>
    </block>
</reference>');
$layout->generateXml();.

对于参考,请检查site