Eu tenho pesquisado bastante no Google, tentativa e erro, mas não consigo encontrar uma solução para o problema.
- A capacidade de alterar os campos e a ordem do sales_order_grid; e
- A capacidade de exibir dois campos personalizados nesta grade (filtrável).
O primeiro (ponto 1) foi resolvido estendendo o Mage_Adminhtml_Block_Widget_Grid
módulo personalizado (eu sei sobre observadores, outros módulos instalados estavam substituindo minhas alterações pelos observadores).
Independentemente disso, o último é o meu problema atual, abaixo estão os dois métodos que me falharam até agora.
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
A essa altura, eu estava cansado de ler os mesmos 7 artigos que não ajudavam, então tentei fazer UM campo funcionar; Também verifiquei os logs de erro no Magento e constatei que "$ this-> getTable ()" estava incorreto e, portanto, o removi.
<?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();
O que leva a pergunta: qual é a diferença entre uma coluna e um atributo? Minha suposição inicial era que, uma coluna é adicionada a uma tabela principal existente enquanto um atributo é adicionado às tabelas EAV_ * e relacionado adequadamente.
fonte
Respostas:
Sua presunção está correta.
Mas para a
sales_
mesa eles são o mesmo.Inicialmente, as entidades de vendas eram EAV. Eles mudaram para tabelas simples, começando com a versão 1.4.0.1 (eu acho). E para compatibilidade com versões anteriores, ambos os métodos foram mantidos.
Para quaisquer outras entidades de tabela plana (páginas cms, blocos, pesquisas), você não pode usar
addAttribute
apenasaddColumn
, mas para vendas, ele funciona nos dois sentidos.Se você planeja criar uma extensão que deva ser compatível com as versões anteriores à 1.4, use-a
addAttribute
; caso contrário, não vejo sentido nela.fonte
addColumn
método? Embora também não esteja usando 'getTable', pois o sales_flat_order é exatamente isso. Vou tentar que em breve, e retornar com uma virdict :)$this->getTable('sales/flat_order')
pode ser definido comosales_flat_order
; o segundo foi$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
deveria ter sidox_payment_method
.