добавьте полный адрес в столбцы по умолчанию в сетке заказов


Я хочу добавить полный адрес в столбцы по умолчанию "Счет на имя" и "Доставка на имя" в сетке заказов в администраторе Magento. Я прилагаю снимок экрана для более подробного объяснения. enter image description here Пожалуйста, подскажите мне, как я могу этого добиться?

Author: Lalit Kaushik, 2014-01-07

3 answers

Вам необходимо расширить сетку заказов (при условии, что она вам уже знакома).

В расширенном php-файле app/code/local/Yournamespace/Yourmodule/Block/Adminhtml/.../Grid.php

class Yournamespace_Yourmodule_Block_..._Grid extends Mage_Adminhtml_Block_Sales_Order_Grid{
    protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass())
                    ->join(array('soa' => 'sales/order_address'), 'soa.parent_id=main_table.entity_id and soa.address_type = "billing"', array('full_address'=>'CONCAT(soa.firstname, " " , soa.lastname, ",<br/>", soa.street, ",<br/>", soa.city, ",<br/>", soa.region, ",<br/>", soa.postcode)' ), null,'left')
                    ->join(array('soas' => 'sales/order_address'), 'soas.parent_id=main_table.entity_id and soas.address_type = "shipping"', array('full_address_ship'=>'CONCAT(soas.firstname, " " , soas.lastname, ",<br/>", soas.street, ",<br/>", soas.city, ",<br/>", soas.region, ",<br/>", soas.postcode)' ), null,'left');
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

...

Затем внутри метода protected function _prepareColumns() замените следующий код

    $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('full_address', array(
        'header'=> Mage::helper('sales')->__('Billing Address'),
        'width' => '80px',
        'type'  => 'text',
        'index' => 'full_address',
    ));
    $this->addColumn('full_address_ship', array(
        'header'=> Mage::helper('sales')->__('Shipping Address'),
        'width' => '80px',
        'type'  => 'text',
        'index' => 'full_address_ship',
    ));

Ты закончил!

Другим простым и рекомендуемым способом было бы использование события и наблюдателя:

В вашем модуле config.xml

В разделе конфигурация тег...

<config>
    ...
    <adminhtml>
    ...
        <events>
            <sales_order_grid_collection_load_before>
                <observers>
                    <vendor>
                        <type>singleton</type>
                          <class>yourmodule/adminhtml_observer</class>
                        <method>filterOrderCollection</method>
                    </vendor>
                </observers>
            </sales_order_grid_collection_load_before>
            <core_block_abstract_prepare_layout_after>
                <observers>
                    <vendor>
                        <type>singleton</type>
                        <class>yourmodule/adminhtml_observer</class>
                        <method>saleOrderLayout</method>
                    </vendor>
                </observers>
            </core_block_abstract_prepare_layout_after>

В app/code/local/Yournamespace/Yourmodule/Model/Adminhtml/Observer.php

<?php
    class Yournamespace_Yourmodule_Model_Adminhtml_Observer{

        public function filterOrderCollection($observer){
            $collection = $observer->getEvent()->getOrderGridCollection();
            $collection->join(array('soa' => 'sales/order_address'), 'soa.parent_id=main_table.entity_id and soa.address_type = "billing"', array('full_address'=>'CONCAT(soa.firstname, " " , soa.lastname, ",<br/>", soa.street, ",<br/>", soa.city, ",<br/>", soa.region, ",<br/>", soa.postcode)' ), null,'left');
            $collection->join(array('soas' => 'sales/order_address'), 'soas.parent_id=main_table.entity_id and soas.address_type = "shipping"', array('full_address_ship'=>'CONCAT(soas.firstname, " " , soas.lastname, ",<br/>", soas.street, ",<br/>", soas.city, ",<br/>", soas.region, ",<br/>", soas.postcode)' ), null,'left');
        }

        public function saleOrderLayout($evt){
            $tabBlock = $evt->getBlock();
            if($tabBlock instanceof Mage_Adminhtml_Block_Sales_Order_Grid){
                $tabBlock->addColumnAfter('full_address', array(
                'header'=> Mage::helper('sales')->__('Billing Address'),
                'width' => '80px',
                'type'  => 'text',
                'index' => 'full_address',
                ), 'created_at');
                $tabBlock->addColumnAfter('full_address_ship', array(
                'header'=> Mage::helper('sales')->__('Shipping Address'),
                'width' => '80px',
                'type'  => 'text',
                'index' => 'full_address_ship',
                ), 'full_address');
            }
        }

    }
 9
Author: Shathish, 2014-01-09 09:45:26

Лучший способ изменить столбцы, отображаемые в таблице заказов, - использовать наблюдателя, который обновляет таблицу sales_flat_order_grid. В предыдущем вопросе я выполнил полную настройку расширения сетки, см.: Добавление столбца в сетку (наблюдатель) - столбец "идентификатор хранилища" в предложении where является неоднозначной проблемой

В этом примере вам необходимо изменить идентификатор customer_group_id с используемыми адресами. Затем в наблюдателе вам нужно будет добавить коллекцию данных, чтобы она была сохранена каждый раз в таблицу сетки.

В качестве альтернативы вы можете использовать средство визуализации столбца для форматирования и отображения данных для адреса, но для этого требуется выполнить много дополнительных запросов при загрузке таблицы.

 1
Author: Vladimir Kerkhoff, 2017-04-13 12:54:58

App/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php

$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'");

           $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',
            ));
 0
Author: pus, 2014-12-26 10:51:11