添加自定义字段到后台订单列表和订单导出

127 篇文章 0 订阅

1.在本地目录创建Grid文件,用于覆盖后台订单列表的Grid

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     Mage_Adminhtml
 * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Adminhtml sales orders grid
 *
 * @category   Mage
 * @package    Mage_Adminhtml
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Mage_Adminhtml_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
{

    public function __construct()
    {
        parent::__construct();
        $this->setId('sales_order_grid');
        $this->setUseAjax(true);
        $this->setDefaultSort('created_at');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
    }

    /**
     * Retrieve collection class
     *
     * @return string
     */
    protected function _getCollectionClass()
    {
        return 'sales/order_grid_collection';
    }

    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        
        $collection->getSelect()
        ->joinLeft(array('cn' => 'customer_entity_varchar'), 
        		'main_table.customer_id = cn.entity_id and cn.attribute_id = 155',
        		array('company_name'=>'cn.value')
        		)
        ->joinLeft(array('fee_center_num' => 'customer_entity_varchar'),
        		'main_table.customer_id = fee_center_num.entity_id and fee_center_num.attribute_id = 157',
        		array('fee_center_number' => 'fee_center_num.value')
        		);
        
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

    protected function _prepareColumns()
    {

        $this->addColumn('real_order_id', array(
            'header'=> Mage::helper('sales')->__('Order #'),
            'width' => '80px',
            'type'  => 'text',
            'index' => 'increment_id',
        ));

        if (!Mage::app()->isSingleStoreMode()) {
            $this->addColumn('store_id', array(
                'header'    => Mage::helper('sales')->__('Purchased From (Store)'),
                'index'     => 'store_id',
                'type'      => 'store',
                'store_view'=> true,
                'display_deleted' => true,
            ));
        }

        $this->addColumn('created_at', array(
            'header' => Mage::helper('sales')->__('Purchased On'),
            'index' => 'created_at',
            'type' => 'datetime',
            'width' => '100px',
        ));

        $this->addColumn('billing_name', array(
            'header' => Mage::helper('sales')->__('Bill to Name'),
            'index' => 'billing_name',
        ));

        $this->addColumn('shipping_name', array(
            'header' => Mage::helper('sales')->__('Ship to Name'),
            'index' => 'shipping_name',
        ));

        $this->addColumn('base_grand_total', array(
            'header' => Mage::helper('sales')->__('G.T. (Base)'),
            'index' => 'base_grand_total',
            'type'  => 'currency',
            'currency' => 'base_currency_code',
        ));

        $this->addColumn('grand_total', array(
            'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
            'index' => 'grand_total',
            'type'  => 'currency',
            'currency' => 'order_currency_code',
        ));

        $this->addColumn('status', array(
            'header' => Mage::helper('sales')->__('Status'),
            'index' => 'status',
            'type'  => 'options',
            'width' => '70px',
            'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
        ));
        

        $this->addColumn('company_name', array(
        		'header' => Mage::helper('sales')->__('Company Name'),
        		'index' => 'company_name',
        		'filter_index' => 'cn.value',
        ));
        
        $this->addColumn('fee_center_number', array(
        		'header' => Mage::helper('sales')->__('Fee Center Number'),
        		'index' => 'fee_center_number',
        		'filter_index' => 'fee_center_num.value',
        ));

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            $this->addColumn('action',
                array(
                    'header'    => Mage::helper('sales')->__('Action'),
                    'width'     => '50px',
                    'type'      => 'action',
                    'getter'     => 'getId',
                    'actions'   => array(
                        array(
                            'caption' => Mage::helper('sales')->__('View'),
                            'url'     => array('base'=>'*/sales_order/view'),
                            'field'   => 'order_id'
                        )
                    ),
                    'filter'    => false,
                    'sortable'  => false,
                    'index'     => 'stores',
                    'is_system' => true,
            ));
        }
        $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));

        $this->addExportType('*/*/exportCsvEnhanced', Mage::helper('sales')->__('CSV'));
        //$this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel XML'));

        return parent::_prepareColumns();
    }

    protected function _prepareMassaction()
    {
        $this->setMassactionIdField('entity_id');
        $this->getMassactionBlock()->setFormFieldName('order_ids');
        $this->getMassactionBlock()->setUseSelectAll(false);

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/cancel')) {
            $this->getMassactionBlock()->addItem('cancel_order', array(
                 'label'=> Mage::helper('sales')->__('Cancel'),
                 'url'  => $this->getUrl('*/sales_order/massCancel'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/hold')) {
            $this->getMassactionBlock()->addItem('hold_order', array(
                 'label'=> Mage::helper('sales')->__('Hold'),
                 'url'  => $this->getUrl('*/sales_order/massHold'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/unhold')) {
            $this->getMassactionBlock()->addItem('unhold_order', array(
                 'label'=> Mage::helper('sales')->__('Unhold'),
                 'url'  => $this->getUrl('*/sales_order/massUnhold'),
            ));
        }

        $this->getMassactionBlock()->addItem('pdfinvoices_order', array(
             'label'=> Mage::helper('sales')->__('Print Invoices'),
             'url'  => $this->getUrl('*/sales_order/pdfinvoices'),
        ));

        $this->getMassactionBlock()->addItem('pdfshipments_order', array(
             'label'=> Mage::helper('sales')->__('Print Packingslips'),
             'url'  => $this->getUrl('*/sales_order/pdfshipments'),
        ));

        $this->getMassactionBlock()->addItem('pdfcreditmemos_order', array(
             'label'=> Mage::helper('sales')->__('Print Credit Memos'),
             'url'  => $this->getUrl('*/sales_order/pdfcreditmemos'),
        ));

        $this->getMassactionBlock()->addItem('pdfdocs_order', array(
             'label'=> Mage::helper('sales')->__('Print All'),
             'url'  => $this->getUrl('*/sales_order/pdfdocs'),
        ));

        $this->getMassactionBlock()->addItem('print_shipping_label', array(
             'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
             'url'  => $this->getUrl('*/sales_order_shipment/massPrintShippingLabel'),
        ));

        return $this;
    }

    public function getRowUrl($row)
    {
        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId()));
        }
        return false;
    }

    public function getGridUrl()
    {
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }

}

 上面要注意的地方有

1.修改_prepareCollection() 方法,做更多表连接查询

2.修改_prepareColumns() 方法,修改需要展示的列的排序

这个方法中最后部分: 

$this->addExportType('*/*/exportCsvEnhanced', Mage::helper('sales')->__('CSV'));

可以定义新的导出方法的名字

 

2.创建本地模块。专用于重写后台导出订单报表功能

1)创建app/etc/modules/Bysoft_EnhancedExport.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Bysoft_EnhancedExport>
            <active>true</active>
            <codePool>local</codePool>
        </Bysoft_EnhancedExport>
    </modules>
</config>

 2)创建模块配置文件app/code/local/Bysoft/EnhancedExport/etc/config.xm

<?xml version="1.0"?>
<config>
	<modules>
		<Bysoft_EnhancedExport>
			<version>1.0.0.0</version>
		</Bysoft_EnhancedExport>
	</modules>
	<global>
		<blocks>
			<enhancedexport><class>Bysoft_EnhancedExport_Block</class></enhancedexport>
		</blocks>
	</global>
	<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Bysoft_EnhancedExport before="Mage_Adminhtml">Bysoft_EnhancedExport_Mage_Adminhtml</Bysoft_EnhancedExport>
                    </modules>
                </args>
			</adminhtml>
        </routers>
    </admin>
</config>

 3)创建导出的Grid自定义列的文件app/code/local/Bysoft/EnhancedExport/Block/Sales/Order/Grid.php

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     Mage_Adminhtml
 * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Adminhtml sales orders grid
 *
 * @category   Mage
 * @package    Mage_Adminhtml
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Bysoft_EnhancedExport_Block_Sales_Order_Grid extends Mage_Adminhtml_Block_Widget_Grid
{

    public function __construct()
    {
        parent::__construct();
        $this->setId('sales_order_grid');
        $this->setUseAjax(true);
        $this->setDefaultSort('created_at');
        $this->setDefaultDir('DESC');
        $this->setSaveParametersInSession(true);
    }

    /**
     * Retrieve collection class
     *
     * @return string
     */
    protected function _getCollectionClass()
    {
        return 'sales/order_grid_collection';
    }

    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        
        $collection->getSelect()
        ->joinLeft(array('cn' => 'customer_entity_varchar'), 
        		'main_table.customer_id = cn.entity_id and cn.attribute_id = 155',
        		array('company_name'=>'cn.value')
        		)
        ->joinLeft(array('shipping' => 'sales_flat_order_address'),
        		'main_table.entity_id = shipping.parent_id',
        		array('addresses' => new Zend_Db_Expr('concat(shipping.region,shipping.city,shipping.district,shipping.street)'),
        			'shipping_telephone' => new Zend_Db_Expr('shipping.telephone'),
        			'main_created_at' => 'main_table.created_at',
        		
        )
        )
        ->joinLeft(array('fee_center_num' => 'customer_entity_varchar'),
        		'main_table.customer_id = fee_center_num.entity_id and fee_center_num.attribute_id = 157',
        		array('fee_center_number' => 'fee_center_num.value')
        )
        ->join(
				array('oi' => 'sales_flat_order_item'),
				'oi.order_id=`main_table`.entity_id',
				array(
				'skus' => new Zend_Db_Expr('group_concat(`oi`.sku SEPARATOR ",")'),
				'names' => new Zend_Db_Expr('group_concat(`oi`.name SEPARATOR ",")'),
				'quantities' => new Zend_Db_Expr('group_concat(`oi`.qty_ordered SEPARATOR ",")'),
				'prices' => new Zend_Db_Expr('group_concat(`oi`.price SEPARATOR ",")'),
				'row_totals' => new Zend_Db_Expr('group_concat(`oi`.row_total SEPARATOR ",")'),
				)
				);
        
        $collection->getSelect()->group('main_table.entity_id');
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

    protected function _prepareColumns()
    {

        $this->addColumn('real_order_id', array(
            'header'=> Mage::helper('sales')->__('Order #'),
            'width' => '80px',
            'type'  => 'text',
            'index' => 'increment_id',
        ));
        
        $this->addColumn('company_name', array(
        		'header' => Mage::helper('sales')->__('Company Name'),
        		'index' => 'company_name',
        		'filter_index' => 'cn.value',
        ));
        
        $this->addColumn('billing_name', array(
        		'header' => Mage::helper('sales')->__('Bill to Name'),
        		'index' => 'billing_name',
        ));
        
        $this->addColumn('sku', array(
        		'header' => Mage::helper('Sales')->__('Skus'),
        		'width' => '100px',
        		'index' => 'skus',
        		'type' => 'text',
        
        ));
        
        $this->addColumn('names', array(
				'header' => Mage::helper('Sales')->__('Product Name'),
				'width' => '100px',
				'index' => 'names',
				'type' => 'text',
		));       
        
        $this->addColumn('quantities', array(
        		'header' => Mage::helper('Sales')->__('quantities'),
        		'width' => '100px',
        		'index' => 'quantities',
        		'type' => 'text',
        ));
        $this->addColumn('prices', array(
        		'header' => Mage::helper('Sales')->__('price'),
        		'width' => '100px',
        		'index' => 'prices',
        		'type' => 'text',
        ));
        
        $this->addColumn('row_totals', array(
        		'header' => Mage::helper('Sales')->__('row total'),
        		'width' => '100px',
        		'index' => 'row_totals',
        		'type' => 'text',
        ));
        
        
        $this->addColumn('base_grand_total', array(
        		'header' => Mage::helper('sales')->__('G.T. (Base)'),
        		'index' => 'base_grand_total',
        		'type'  => 'currency',
        		'currency' => 'base_currency_code',
        ));
        
        $this->addColumn('grand_total', array(
        		'header' => Mage::helper('sales')->__('G.T. (Purchased)'),
        		'index' => 'grand_total',
        		'type'  => 'currency',
        		'currency' => 'order_currency_code',
        ));
        
        

        $this->addColumn('main_created_at', array(
            'header' => Mage::helper('sales')->__('Purchased On'),
            'index' => 'main_created_at',
            'type' => 'datetime',
            'width' => '100px',
        ));

        

        $this->addColumn('fee_center_number', array(
        		'header' => Mage::helper('sales')->__('Fee Center Number'),
        		'index' => 'fee_center_number',
        		'filter_index' => 'fee_center_num.value',
        ));
        
        
        $this->addColumn('addresses', array(
        		'header' => Mage::helper('sales')->__('Address'),
        		'index' => 'addresses',
        		'type' => 'text',
        		'width' => '100px',
        ));
        
        //shipping_telephone
        $this->addColumn('shipping_telephone', array(
        		'header' => Mage::helper('sales')->__('Telephone'),
        		'index' => 'shipping_telephone',
        		'type' => 'text',
        		'width' => '100px',
        ));
        
        
        /*
        $this->addColumn('shipping_name', array(
            'header' => Mage::helper('sales')->__('Ship to Name'),
            'index' => 'shipping_name',
        ));
        */
        

        
        $this->addColumn('status', array(
            'header' => Mage::helper('sales')->__('Status'),
            'index' => 'status',
            'type'  => 'options',
            'width' => '70px',
            'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
        ));
       
        
        //shipping_telephone
        $this->addColumn('delivery_memo', array(
        		'header' => Mage::helper('sales')->__('Delivery Memo'),
        		'index' => 'delivery_memo',
        		'type' => 'text',
        		'width' => '100px',
        ));
        
        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            $this->addColumn('action',
                array(
                    'header'    => Mage::helper('sales')->__('Action'),
                    'width'     => '50px',
                    'type'      => 'action',
                    'getter'     => 'getId',
                    'actions'   => array(
                        array(
                            'caption' => Mage::helper('sales')->__('View'),
                            'url'     => array('base'=>'*/sales_order/view'),
                            'field'   => 'order_id'
                        )
                    ),
                    'filter'    => false,
                    'sortable'  => false,
                    'index'     => 'stores',
                    'is_system' => true,
            ));
        }
        $this->addRssList('rss/order/new', Mage::helper('sales')->__('New Order RSS'));

        $this->addExportType('*/*/exportCsvEnhanced', Mage::helper('sales')->__('CSV'));
        $this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel XML'));

        return parent::_prepareColumns();
    }

    protected function _prepareMassaction()
    {
        $this->setMassactionIdField('entity_id');
        $this->getMassactionBlock()->setFormFieldName('order_ids');
        $this->getMassactionBlock()->setUseSelectAll(false);

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/cancel')) {
            $this->getMassactionBlock()->addItem('cancel_order', array(
                 'label'=> Mage::helper('sales')->__('Cancel'),
                 'url'  => $this->getUrl('*/sales_order/massCancel'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/hold')) {
            $this->getMassactionBlock()->addItem('hold_order', array(
                 'label'=> Mage::helper('sales')->__('Hold'),
                 'url'  => $this->getUrl('*/sales_order/massHold'),
            ));
        }

        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/unhold')) {
            $this->getMassactionBlock()->addItem('unhold_order', array(
                 'label'=> Mage::helper('sales')->__('Unhold'),
                 'url'  => $this->getUrl('*/sales_order/massUnhold'),
            ));
        }

        $this->getMassactionBlock()->addItem('pdfinvoices_order', array(
             'label'=> Mage::helper('sales')->__('Print Invoices'),
             'url'  => $this->getUrl('*/sales_order/pdfinvoices'),
        ));

        $this->getMassactionBlock()->addItem('pdfshipments_order', array(
             'label'=> Mage::helper('sales')->__('Print Packingslips'),
             'url'  => $this->getUrl('*/sales_order/pdfshipments'),
        ));

        $this->getMassactionBlock()->addItem('pdfcreditmemos_order', array(
             'label'=> Mage::helper('sales')->__('Print Credit Memos'),
             'url'  => $this->getUrl('*/sales_order/pdfcreditmemos'),
        ));

        $this->getMassactionBlock()->addItem('pdfdocs_order', array(
             'label'=> Mage::helper('sales')->__('Print All'),
             'url'  => $this->getUrl('*/sales_order/pdfdocs'),
        ));

        $this->getMassactionBlock()->addItem('print_shipping_label', array(
             'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
             'url'  => $this->getUrl('*/sales_order_shipment/massPrintShippingLabel'),
        ));

        return $this;
    }

    public function getRowUrl($row)
    {
        if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/view')) {
            return $this->getUrl('*/sales_order/view', array('order_id' => $row->getId()));
        }
        return false;
    }

    public function getGridUrl()
    {
        return $this->getUrl('*/*/grid', array('_current'=>true));
    }
    
    

}

 4)创建app/code/local/Bysoft/EnhancedExport/controllers/Mage/Adminhtml/Sales/OrderController.php

继承核心导出方法

<?php
$defController = Mage::getBaseDir()
    . DS . 'app' . DS . 'code' . DS . 'core'
    . DS . 'Mage' . DS . 'Adminhtml' . DS . 'controllers'
    . DS . 'Sales' . DS . 'OrderController.php';
require_once $defController;
class Bysoft_EnhancedExport_Mage_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{
    /**
     * Export order grid to CSVi format
     */
    public function exportCsvEnhancedAction()
    {
        $fileName   = 'orders-' . gmdate('YmdHis') . '.csv';
        $grid       = $this->getLayout()->createBlock('enhancedexport/sales_order_grid');
        $this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
    }
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值