Après beaucoup d'essais et d'erreurs - beaucoup d'erreur - je pense avoir maintenant.
Pour commencer par le sales_flat_order_grid
est mis à jour en Mage_Sales_Model_Mysql4_Order_Abstract::updateGridRecords()
, en suivant la piste que je travaillais sur elle inspecte aussi bien la table « principale » (sales_flat_order
) et la table principale + « _grid » (sales_flat_order_grid
), prend la Intersection de leurs colonnes et construit une requête à partir de cela. Ainsi, toute colonne dont vous avez besoin dans la table de la grille doit également figurer dans la table principale. Ce n'est pas une entité de style EAV, donc les attributs n'ont pas besoin d'être créés.
Voici mon script d'installation:
<?php
/* @var $this Nexxt_Booth_Model_Entity_Setup */
$installer = $this;
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order'), 'box_num', 'varchar(255)');
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order_grid'), 'box_num', 'varchar(255)');
Ensuite, je avais besoin la colonne supplémentaire pour afficher dans toutes les tables de commande en administration. Pour ce faire, je surpasse chaque bloc pertinent.
<?xml version="1.0"?>
<config>
....
<global>
<blocks>
<adminhtml>
<rewrite>
<customer_edit_tab_view_orders>
<!-- Recent 5 orders on customer page -->
My_Module_Block_Adminhtml_Customer_Edit_Tab_View_Orders
</customer_edit_tab_view_orders>
<customer_edit_tab_orders>
<!-- All orders on customer tab -->
My_Module_Block_Adminhtml_Customer_Edit_Tab_Orders
</customer_edit_tab_orders>
<sales_order_grid>
<!-- All orders in Sales menu -->
My_Module_Block_Adminhtml_Sales_Order_Grid
</sales_order_grid>
</rewrite>
</adminhtml>
</blocks>
</global>
</config>
En My/Module/Block/Adminhtml/Sales/Order/Grid.php
je fait ce qui suit:
<?php
class My_Module_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
protected function _prepareColumns()
{
$this->addColumn('box_num', array(
'header' => $this->__('Box #'),
'index' => 'box_num',
'width' => '100px'
));
$this->addColumnsOrder('box_num', 'shipping_name');
return parent::_prepareColumns();
}
}
De même, dans My/Module/Block/Adminhtml/Customer/Edit/Tab/Orders.php
et My/Module/Block/Adminhtml/Customer/Edit/Tab/View/Orders.php
j'ai ajouté cette fonction:
protected function _prepareColumns()
{
$this->addColumn('box_num', array(
'header' => $this->__('Box #'),
'index' => 'box_num',
'width' => '100px'
));
$this->addColumnsOrder('box_num', (Mage::app()->isSingleStoreMode() ? 'grand_total' : 'store_id'));
return parent::_prepareColumns();
}
Enfin, pour terminer, en cas sales_convert_quote_to_order
I peuplé le nouveau champ. Ce bit n'est pas aussi important, du moment que vous ajoutez les données à un point avant que la commande ne soit enregistrée.
$order->setBoxNum('DATA GOES HERE');
Je suis en train de faire exactement la même chose, je me suis fait une nouvelle colonne dans sales_flat_order_grid comme code à barres_no et en utilisant Grid.php j'ai affiché cette colonne dans la grille des commandes magento.Maintenant, comment puis-je stocker la valeur de barcode_no du backend magento dans la table sales_flat_order_grid? –
@ShujaatShaikh avec qui avez-vous des problèmes? – clockworkgeek
Non où je peux trouver un tuturial, expliquant comment insérer une valeur personnalisée à ma base de données php à partir de backend d'administration magento. Tout article serait une aide précieuse! –