我的活动观察员出了什么问题?

时间:2017-09-27 17:36:25

标签: magento-1.9 adminhtml

我将事件观察者编码为我的销售订单网格中添加自定义列,但仍然没有将列显示到我网站的管理面板中?此代码用于自定义magento销售订单网格。这是我的代码:

应用/代码/小区/ 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>

应用/代码/小区/ Mjsi / Orderprint /型号/ 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') . '\')',
    ));           
}
}
}

1 个答案:

答案 0 :(得分:0)

好的,要向销售网格添加新列,您需要添加配置此事件:

<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中加载配置,如果你没有,你需要添加`

<adminhtml>
        <layout>
            <updates>
                <your_model>
                    <file>your_file.xml</file>
                </your_model>
            </updates>
        </layout>
</adminhtml>

并在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>

希望有所帮助!