Magento:调用我模块中的核心块

时间:2013-03-04 10:00:21

标签: php magento


嗨, 我正在写一个Magento模块。为此我想在模块的处理程序中调用一个核心块。我不想修改或扩展核心块。我只想在布局处理程序中调用它。有什么建议吗?

我要插入的块位于

adminhtml/sales/order/view/history.php

以下处理程序位于sales.xml中,其中包含上面的Histrory.php块

 <adminhtml_sales_order_addcomment>
        <block type="adminhtml/sales_order_view_history" name="order_history" template="sales/order/view/history.phtml" output="toHtml"/>
    </adminhtml_sales_order_addcomment>

这是我的layout.xml

       <orderadmin_adminhtml_orderadmin_search> 
        <update handle="orderadmin_orderadmin_search" />
         <reference name="content"> 
     <!-- I want to insert the following block --> 
        <block type="adminhtml/sales_order_view_history" name="order_history" template="sales/order/view/history.phtml" output="toHtml"/> 
</reference> 
</orderadmin_adminhtml_orderadmin_search>

但它会导致以下错误。

致命错误:在第79行的\ app \ code \ core \ Mage \ Adminhtml \ Block \ Sales \ Order \ View \ History.php中的非对象上调用成员函数getId()

2 个答案:

答案 0 :(得分:1)

你必须在你的代码中这样做:

<!-- this is my handler -->
<orderadmin_adminhtml_orderadmin_search>
        <update handle="orderadmin_orderadmin_search" />
        <reference name="content">
            <block type="orderadmin/adminhtml_search" name="search_order" />
            <!-- I want to call the core block here -->
  

从核心布局中选取您想要的块并将其粘贴到此处   是,它将被渲染

        </reference>
    </orderadmin_adminhtml_orderadmin_search>

答案 1 :(得分:1)

问题与xml布局无关,这是非常正确的,并且可以正常工作。

问题是因为此块期望订单在注册表中,以使其能够获取历史记录。

在渲染历史记录块之前,您应该在控制器或模块块的注册表中设置一个订单(您希望用于查看历史记录的订单)。

// load your order here..
Mage::register('sales_order', $order);