在Magento 1.7中将列添加到Sales Order Grid的正确方法

时间:2013-03-02 07:48:36

标签: magento magento-1.7

我正在寻找一种方法将列添加到Magento的Sales / Order网格中。有许多教程但我发现它们涉及通过将它们放在本地CodePool中来覆盖Core文件,这并不总是很好的做法。

我想补充一下:

邮编, 地址, 电子邮件, 电话, 订单ID, 客户id

如果有人可以分享我可以用来实现这一目标的解决方案或扩展程序而没有Core覆盖,我将非常感激。

<?xml version="1.0"?>
<gridcontrol>
    <grids>
        <!-- grid id -->
        <sales_order_grid>
            <shipping_description>
                <add>
                    <header>Shipping Description</header>
                    <!-- join shipping description from sales/order table -->
                    <join table="sales/order" condition="main_table.entity_id={{table}}.entity_id" field="shipping_description"/>
                </add>
               <after>status</after>
            </shipping_description>
            <shipping_address>
                <add>
                    <header>Shipping Address</header>
                    <!-- join shipping description from sales/order table -->
                    <join table="sales/order" condition="main_table.entity_id={{table}}.entity_id" field="shipping_address"/>
                </add>
                <after>status</after>
            </shipping_address>
            <Billing_address>
                <add>
                    <header>Billing Address</header>
                    <!-- join shipping description from sales/order table -->
                    <join table="sales/order" condition="main_table.entity_id={{table}}.entity_id" field="billing_address"/>
                </add>
                <after>status</after>
            </Billing_address>
            <Telephone>
                <add>
                    <header>Telephone</header>
                    <!-- join shipping description from sales/order table -->
                    <join table="sales/order" condition="main_table.entity_id={{table}}.entity_id" field="telephone"/>
                </add>
                <after>status</after>
            </Telephone>
            <CustomerID>
                <add>
                    <header>Customer ID</header>
                    <!-- join shipping description from sales/order table -->
                    <join table="sales/order" condition="main_table.entity_id={{table}}.entity_id" field="customer_id"/>
                </add>
                <after>status</after>
            </CustomerID>
        </sales_order_grid>
    </grids>
</gridcontrol>

3 个答案:

答案 0 :(得分:3)

我同意覆盖不好,但您可以创建一个新模块并扩展Order网格的功能并添加新属性。这样您只需要取消激活模块以禁用它的功能。

如果你不知道如何做到这一点,这是一个很好的教程由inchoo博客: http://inchoo.net/ecommerce/magento/how-to-extend-magento-order-grid/

答案 1 :(得分:1)

我建议https://github.com/magento-hackathon/GridControl。只需安装扩展程序,然后使用带有所需内容的gridcontrol.xml编写第二个扩展名。

答案 2 :(得分:0)

copy and past code 
app/code/core/Mage/Adminhtml/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) 2013 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('sales_flat_order_address', 'main_table.entity_id = sales_flat_order_address.parent_id',array('telephone','city','postcode' ) )->where("sales_flat_order_address.address_type = 'billing'");
        $collection->getSelect()->joinLeft('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('total_qty_ordered'));
         $collection->getSelect()->joinLeft(array('sfoa' => 'sales_flat_order_address'), 'main_table.entity_id = sfoa.parent_id AND sfoa.address_type="shipping"', array('sfoa.street', 'sfoa.city', 'sfoa.region', 'sfoa.postcode', 'sfoa.telephone'));
        $collection->getSelect()->joinLeft('sales_flat_order_payment', 'main_table.entity_id = sales_flat_order_payment.parent_id',array('method'));
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }
    protected function _getAttributeOptions($attribute_code)
        {
            $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $attribute_code);
            $options = array();
            foreach( $attribute->getSource()->getAllOptions(true, true) as $option ) {
                $options[$option['value']] = $option['label'];
            }
            return $options;
        }
        protected function _prepareColumns()
        {
        $this->addColumn('created_at', array(
        'header' => Mage::helper('sales')->__('Date'),//Date=Purchased On
        'index' => 'created_at',
        'type' => 'datetime',
        'width' => '100px',
        'filter_index' => 'main_table.created_at',//
        ));
        $this->addColumn('real_order_id', array(
        'header'=> Mage::helper('sales')->__('Order Id'), //Order #=order id
        'width' => '80px',
        'type'=> 'text',
        'index' => 'increment_id',
        'filter_index' => 'main_table.increment_id',
        ));
        if (!Mage::app()->isSingleStoreMode()) {
        $this->addColumn('store_id', array(
        'header'=> Mage::helper('sales')->__('Purchased From (Store)'),
        'index'=> 'store_id',
        'type'=> 'store',
        'filter_index' => 'main_table.store_id',
        'store_view'=> true,
        'display_deleted' => true,
        ));
        }
        $this->addColumn('billing_name', array(
        'header' => Mage::helper('sales')->__('Customer Name'), //Bill to Name=Customer Name
        'index' => 'billing_name',
        'filter_index' => 'main_table.billing_name',
        ));
        $this->addColumn('telephone', array(
        'header' => Mage::helper('sales')->__('Mobile'),
        'index' => 'telephone',
        'filter_index' => 'sales_flat_order_address.telephone',
        ));
        $this->addColumn('city', array(
        'header' => Mage::helper('sales')->__('City'),
        'index' => 'city',
        'filter_index' => 'sales_flat_order_address.city',
        ));
        $this->addColumn('postcode', array(
        'header' => Mage::helper('sales')->__('Pincode'),
        'index' => 'postcode',
        'filter_index' => 'sales_flat_order_address.postcode',
        ));
         $this->addColumn('city', array(
               'header' => Mage::helper('sales')->__('City'),
               'index' => 'city', 'filter_condition_callback' => array($this, '_addEGColumnFilter'),
           ));
           $this->addColumn('street', array(
               'header' => Mage::helper('sales')->__('Street'),
               'index' => 'street',
               'filter_condition_callback' => array($this, '_addEGColumnFilter'),
           ));
           $this->addColumn('postcode', array(
               'header' => Mage::helper('sales')->__('Postcode'),
               'index' => 'postcode',
               'filter_condition_callback' => array($this, '_addEGColumnFilter'),
           ));
           $this->addColumn('telephone', array(
               'header' => Mage::helper('sales')->__('Telephone'),
               'index' => 'telephone',
               'filter_condition_callback' => array($this, '_ customColumnFilter'),
           ));
        $this->addColumn('method', array(
        'header' => Mage::helper('sales')->__('Payment method'),
        'index' => 'method',
        'filter_index' => 'sales_flat_order_payment.method',
        ));
        $this->addColumn('total_qty_ordered', array(
        'header' => Mage::helper('sales')->__('Qty'),
        'index' => 'total_qty_ordered',
        'filter_index' => 'sales_flat_order.total_qty_ordered',
        ));
        $this->addColumn('color', array(
        'header' => Mage::helper('sales')->__('Color'),
        'index' => 'color',
        'filter_index' => 'sales_flat_order.color',
        ));
        $this->addColumn('grand_total', array(
        'header' => Mage::helper('sales')->__('Order amount'),//G.T. (Purchased)=Order amount
        'index' => 'grand_total',
        'type'=> 'currency',
        'currency'=> 'order_currency_code',
        'filter_index' => 'main_table.grand_total',
        ));
        $this->addColumn('status', array(
        'header' => Mage::helper('sales')->__('Status'),
        'index' => 'status',
        'filter_index' => 'main_table.status',
        'type' => 'options',
        'width' => '70px',
        'options' => Mage::getSingleton('sales/order_config')->getStatuses(),
        ));
        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('*/*/exportCsv', Mage::helper('sales')->__('CSV'));
        $this->addExportType('*/*/exportExcel', Mage::helper('sales')->__('Excel'));
        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));
    }

}