ajouter l'adresse complète dans les colonnes par défaut dans la grille de commande
-
16-10-2019 - |
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. S'il vous plaît me suggérer comment puis-je y parvenir?
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',
));