1

我正在寻找一种将列添加到 Magento 中的销售/订单网格的方法。有很多教程,但我发现它们涉及通过将核心文件放置在本地代码池中来覆盖核心文件,这并不总是好的做法。

我正在尝试添加:

邮政编码、地址、电子邮件、电话、OrderID、CustomerID

如果有人可以分享一个解决方案或扩展,我可以在没有核心覆盖的情况下实现这一目标,我将非常感激。

<?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>
4

3 回答 3

3

我同意覆盖不好,但您可以创建一个新模块并扩展订单网格的功能并添加新属性。这样,您只需停用模块即可禁用其功能。

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

于 2013-03-02T11:10:35.113 回答
1

我为此推荐https://github.com/magento-hackathon/GridControl 。只需安装扩展程序并使用带有所需内容的 gridcontrol.xml 编写第二个扩展程序。

于 2013-03-02T11:35:37.157 回答
1
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));
    }

}
于 2014-12-26T11:37:03.520 回答