He estado buscando bastante en Google, prueba y error, pero no puedo encontrar una solución al problema.
- La capacidad de cambiar los campos y el orden de sales_order_grid; y
- La capacidad de mostrar dos campos personalizados en esta cuadrícula (filtrable).
El primero (punto 1) se resolvió extendiendo el Mage_Adminhtml_Block_Widget_Grid
módulo personalizado (sé sobre observadores, pero otros módulos instalados anulaban mis cambios con sus observadores).
De todos modos, este último es mi problema actual, a continuación se encuentran los dos métodos que me han fallado hasta ahora.
Método 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étodo 2
En este punto, estaba cansado de leer los mismos 7 artículos que no me ayudaron, así que intenté hacer que UN campo funcionara; También verifiqué los registros de error en Magento y descubrí que "$ this-> getTable ()" era erróneo, por lo que lo eliminé.
<?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();
Lo que hace que uno se pregunte, ¿cuál es la diferencia entre una columna y un atributo? Mi suposición inicial fue que, una columna se agrega a una tabla principal existente mientras que un atributo se agrega a las tablas EAV_ * y se relaciona adecuadamente.
fuente
Respuestas:
Tu presunción es correcta.
Pero para la
sales_
mesa son uno y lo mismo.Inicialmente, las entidades de ventas eran EAV. Cambiaron a tablas planas a partir de la versión 1.4.0.1 (creo). Y por compatibilidad con versiones anteriores, se mantuvieron ambos métodos.
Para cualquier otra entidad con tablas planas (páginas cms, bloques, encuestas) que no puede usar
addAttribute
, soloaddColumn
, pero para ventas funciona en ambos sentidos.Si planea hacer una extensión que tenga que ser compatible con versiones anteriores a la 1.4
addAttribute
, úsela, de lo contrario, no veo ningún punto en ello.fuente
addColumn
método. Si bien tampoco está usando 'getTable' como sales_flat_order, es solo eso. Probaré eso en breve, y volveré con un virdict :)$this->getTable('sales/flat_order')
podría estar configurado parasales_flat_order
; el segundo fue$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
debería haber sidox_payment_method
.