1

Magento の Sales/Order グリッドに列を追加する方法を探しています。多くのチュートリアルがありますが、コア ファイルを Local CodePool に配置してオーバーライドする必要があることがわかりました。これは常に良い方法ではありません。

私は追加しようとしています:

郵便番号、住所、電子メール、電話番号、OrderID、CustomerID

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>
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 を使用して 2 つ目の拡張機能を作成するだけです。

于 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 に答える