嗨,
我正在写一个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()
答案 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);