我对事件观察者进行了编码,以在我的销售订单网格中添加自定义列,但仍未向我的网站管理员面板显示列?此代码用于自定义Magento销售订单网格。这是我的代码:
app/code/code/mjsi/orderprint/etc/config.xml
<adminhtml>
---
<events>
<core_layout_block_create_after>
<observers>
<mjsi_orderprint_add_columns>
<class>Mjsi_Orderprint_Model_Observer</class>
<method>addColumnsToGrid</method>
</mjsi_orderprint_add_columns>
</observers>
</core_layout_block_create_after>
<core_block_abstract_prepare_layout_before>
<observers>
<orderprint_core_block_abstract_prepare_layout_before>
<class>Mjsi_Orderprint_Model_Observer</class>
<method>addMassAction</method>
</orderprint_core_block_abstract_prepare_layout_before>
</observers>
</core_block_abstract_prepare_layout_before>
<adminhtml_widget_container_html_before>
<observers>
<mjsi_orderprint>
<class>Mjsi_Orderprint_Model_Observer</class>
<method>adminhtmlWidgetContainerHtmlBefore</method>
</mjsi_orderprint>
</observers>
</adminhtml_widget_container_html_before>
<events>
---
</adminhtml>
app/code/code/mjsi/orderprint/model/observer.php
<?php
class Mjsi_Orderprint_Model_Observer
{
/**
* Add new column to orders grid
*
* @param Varien_Event_Observer $observer
* @return $this
*/
public function addColumnsToGrid(Varien_Event_Observer $observer)
{
$block = $observer->getEvent()->getBlock();
// Check whether the loaded block is the orders grid block
if (!($block instanceof Mage_Adminhtml_Block_Sales_Order_Grid)
|| $block->getNameInLayout() != 'sales_order.grid'
) {
return $this;
}
// Add a new column rigth after the "Status" column
$block->addColumnAfter('mjsi_orderprint', [
'header' => $block->__('Printed'),
'width' => '80px',
'filter' => false,
'renderer' =>'Mjsi_Orderprint_Block_Adminhtml_Sales_Order_Renderer_Printed',
//'index' => 'coupon_rule_name',
], 'status');
return $this;
}
public function addMassAction(Varien_Event_Observer $observer)
{
$block = $observer->getEvent()->getBlock();
if(get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
&& $block->getRequest()->getControllerName() == 'sales_order')
{
$block->addItem('massPrintSalesOrders_order', array(
'label' => 'Print Sales Orders',
'url' => Mage::app()->getStore()->getUrl('*/*/massPrintSalesOrders'),
));
}
}
public function adminhtmlWidgetContainerHtmlBefore($event) {
$block = $event->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Sales_Order_View) {
$block->addButton('order_print', array(
'label' => Mage::helper('sales')->__('Print Orders'),
'onclick' => 'setLocation('' . $block->getUrl('*/*/print') . '')',
));
}
}
}
好的,要在销售网格中添加新列,您需要在config此事件中添加:
<sales_order_grid_collection_load_before>
<observers>
<mjsi_orderprint_add_columns>
<model>your_model/observer</model>
<method>addGridColumnsToSelect</method>
</mjsi_orderprint_add_columns>
</observers>
</sales_order_grid_collection_load_before>
然后,在观察者中,您需要添加主收集列,我从订单表中添加了一个自定义字段orygin_type:
public function addGridColumnsToSelect(Varien_Event_Observer $observer)
{
$collection = $observer->getOrderGridCollection();
$orderTable = Mage::getSingleton('core/resource')->getTableName('sales_flat_order');
$collection->getSelect()
->joinLeft(
['order_table' => $orderTable],
"main_table.entity_id = order_table.entity_id",
[
'origin_type' => 'order_table.origin_type',
]
);
return $this;
}
之后,在您的布局XML中加载了config,如果没有,则需要添加`
<adminhtml>
<layout>
<updates>
<your_model>
<file>your_file.xml</file>
</your_model>
</updates>
</layout>
</adminhtml>
and app design adminhtml default default layout your_file.xml添加以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<layout>
<sales_order_grid_update_handle_origin_type>
<reference name="sales_order.grid">
<action method="addColumnAfter">
<columnId>origin_type</columnId>
<arguments module="sales" translate="header">
<header>Origin Type</header>
<index>origin_type</index>
<type>text</type>
<width>100</width>
<filter_index>order_table.origin_type</filter_index>
</arguments>
<after>base_subtotal</after>
</action>
</reference>
</sales_order_grid_update_handle_origin_type>
</layout>
希望它有帮助!