Question

Je fais un montant équitable de googler, essai et erreur, mais je ne peux pas trouver une solution au problème.

  1. La possibilité de modifier les champs et l'ordre des sales_order_grid; et
  2. La possibilité d'afficher deux champs personnalisés sur cette grille (filtrables).

Le premier (point 1) a été résolu, en étendant le Mage_Adminhtml_Block_Widget_Grid dans mon module personnalisé (je sais observateurs, mais d'autres modules installés ont été PRÉPONDÉRANTS mes changements avec leurs observateurs).

Peu importe, ce dernier est mon problème actuel, ci-dessous sont les deux méthodes qui me 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

Par ce point, je suis fatigué de lire les mêmes articles 7 qui n'a pas aidé, alors j'ai essayé d'en obtenir un travail sur le terrain; J'ai également vérifié les journaux d'erreur dans Magento et trouvé « $ this-> getTable () » était errornous, je l'ai enlevé ainsi.

<?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 un soulèvent 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 de base existant alors qu'un attribut est ajouté à la EAV_ * tables et correctement liés.

Était-ce utile?

La solution

Votre présomption est correcte.
Mais pour la table sales_ ils sont une seule et même.
Au départ, les entités commerciales étaient EAV. Ils ont changé dans les tables plates commençant par la version 1.4.0.1 (je pense). Et pour la rétrocompatibilité les deux méthodes ont été maintenues.
Pour toute autre entité déposée de plats (cms pages, blocs, sondages) vous ne pouvez pas utiliser addAttribute, seulement addColumn, mais pour la vente cela fonctionne dans les deux sens.
Si vous envisagez de faire une extension qui doit être compatible avec les versions antérieures à 1.4 puis utiliser addAttribute, sinon je ne vois pas en elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top