J'ai fait pas mal de recherches sur Google, d'essais et d'erreurs, mais je ne trouve pas de solution au problème.
- La possibilité de modifier les champs et l'ordre de sales_order_grid; et
- La possibilité d'afficher deux champs personnalisés sur cette grille (filtrable).
Le premier (point 1) a été résolu, en étendant le Mage_Adminhtml_Block_Widget_Grid
dans mon module personnalisé (je connais les observateurs, mais d'autres modules installés remplaçaient mes changements avec leurs observateurs).
Quoi qu'il en soit, ce dernier est mon problème actuel, voici les deux méthodes qui m'ont échoué jusqu'à présent.
Méthode 1
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_payment_method',
"ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
/**
* Create the order channel field to identify where the order was originally
* generated from. Also add an index for this field for additional filtering.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_sale_channel',
"ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');
$this->endSetup();
Méthode 2
À ce stade, j'étais fatigué de lire les 7 mêmes articles qui n'ont pas aidé, alors j'ai essayé de faire travailler UN champ; J'ai également vérifié les journaux d'erreurs dans Magento et trouvé "$ this-> getTable ()" était erroné, donc je l'ai supprimé.
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$this->addAttribute('sales_flat_order', 'x_test_option', array(
'label' => 'X Test Option',
'type' => 'varchar',
'input' => 'select',
'visible' => true,
'required' => false,
'position' => 1,
'visible_on_front' => false,
'option' => array('value' => array('web', 'test 1', 'test 2')),
'default' => array('web'),
));
$this->endSetup();
Ce qui fait qu'on se pose la question, quelle est la différence entre une colonne et un attribut? Ma présomption initiale était que, une colonne est ajoutée à une table principale existante tandis qu'un attribut est ajouté aux tables EAV_ * et associé de manière appropriée.
la source
Réponses:
Votre présomption est correcte.
Mais pour la
sales_
table, ils sont une seule et même chose.Initialement, les entités de vente étaient EAV. Ils ont changé en tables plates à partir de la version 1.4.0.1 (je pense). Et pour une compatibilité ascendante, les deux méthodes ont été conservées.
Pour toutes les autres entités à plat (pages cms, blocs, sondages) que vous ne pouvez pas utiliser
addAttribute
uniquementaddColumn
, mais pour les ventes, cela fonctionne dans les deux sens.Si vous prévoyez de faire une extension qui doit être compatible avec les versions antérieures à 1.4
addAttribute
, utilisez-la , sinon je n'y vois aucun intérêt.la source
addColumn
méthode? Tout en n'utilisant pas «getTable» comme sales_flat_order, c'est juste cela. Je vais l'essayer sous peu et je reviendrai avec un virdict :)$this->getTable('sales/flat_order')
aussi bien régléesales_flat_order
; le second était$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
aurait dû êtrex_payment_method
.