我一直在进行大量的谷歌搜索,反复试验,但我找不到解决问题的方法。
- 更改sales_order_grid的字段和顺序的能力;和
- 在此网格上显示两个自定义字段的能力(可过滤)。
前者(第1点)已通过扩展Mage_Adminhtml_Block_Widget_Grid
我的自定义模块来解决(我了解观察者,但其他已安装的模块正在用他们的观察者覆盖我的更改)。
无论如何,后者是我当前的问题,以下是迄今为止使我失败的两种方法。
方法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();
方法二
至此,我已经厌倦了阅读那7篇没有帮助的文章,因此我尝试着使一个领域工作。我还检查了Magento中的错误日志,发现“ $ this-> getTable()”是错误的,因此将其删除。
<?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();
哪个使人产生疑问,列和属性之间有什么区别?我最初的假设是,将一列添加到现有的核心表中,同时将一个属性添加到EAV_ *表中并适当地相关。
即使该表是平坦的,它的资源模型还是EAV,因此必须在要写入的EAV配置中注册该属性。几个销售实体曾经是EAV,但由于性能原因而被夷为平地。
—
benmarks 2013年