Question

Je veux ajouter l'adresse complète en défaut « Bill Nom » et « Ship to Name » colonnes dans la grille de l'ordre dans l'admin Magento. J'attache écran-shot pour plus d'explications. entrer dans la description d'image ici S'il vous plaît me suggérer comment puis-je y parvenir?

Était-ce utile?

La solution

Vous devez étendre le réseau de commande (en supposant qu'il est déjà familier).

dans l'application fichier php extension / code / local / Yournamespace / Yourmodule / Bloc / 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();
}

...

ensuite procédé à l'intérieur de protected function _prepareColumns() remplacer le code ci-dessous

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

avec

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

Vous avez terminé!

L'autre moyen simple et recommandé serait d'utiliser l'événement et observateur:

dans votre module config.xml

sous étiquette config ...

<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 / Modèle / 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');
            }
        }

    }

Autres conseils

La meilleure façon de changer les colonnes affichées dans la grille de commande est d'utiliser l'observateur qui met à jour la table de sales_flat_order_grid. Dans une question précédente, je l'ai fait une configuration complète sur la façon d'étendre le réseau, voir: Ajouter une colonne à une grille (observateur) - Colonne 'store_id' dans la clause where est question ambiguë

Dans cet exemple, vous devez changer la customer_group_id avec les adresses utilisées. Dans l'observateur, vous devrez alors ajouter la collecte des données afin qu'il soit enregistré dans la table de la grille à chaque fois.

Vous pouvez également utiliser le moteur de rendu pour la colonne au format et afficher les données de l'adresse, mais cela suppose que vous faites beaucoup de requêtes supplémentaires lors du chargement de la grille.

app / code / core / Mage / Adminhtml / Bloc / Ventes / commande / 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',
            ));
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top