将新列添加到sales_flat_order_grid
-
16-10-2019 - |
题
如何在 sales_flat_order_grid
表格并确保在此正确插入值?
新列的“源”是我们添加到的自定义列 sales_flat_order
, ,我们称之为 foo
. 。 Afaict,有三种方法可以获取 foo
以主要顺序网格出现:
JOIN
这sales_flat_order_grid
收集到sales_flat_order
.- 问题: 过滤器由于曲线含糊不清而不再工作(因为这两个表都有相似的列名)
- 使用网格
sales_flat_order
对于数据而不是sales_flat_order_grid
.- 问题: 列没有索引,因此过滤的速度可怕。在未使用的未使用中添加相同的数据似乎很愚蠢
sales_flat_order_grid
桌子。
- 问题: 列没有索引,因此过滤的速度可怕。在未使用的未使用中添加相同的数据似乎很愚蠢
- 将新列添加到
sales_flat_order_grid
并确保那里的价值更新
我不知道如何 sales_flat_order_grid
正在更新,因此我不知道如何添加此新列。有什么想法吗?
解决方案
这 sales_flat_order_grid
每个订单保存操作都会更新表。您可以在您自己的扩展程序中的表中添加自定义列,如果添加了Sales_flat_order表中已经使用的列名,则不需要添加任何额外的内容,在每个订单示波操作上都更新了列的每个订单操作(如果需要) 。如果要从其他表中插入数据,则需要为 sales_order_resource_init_virtual_grid_columns
收集并准备加入的活动。
有关更多详细信息和一个工作示例,请参见我的答案 将列添加到网格(观察者) - 列中的“ store_id”列中的子句是模棱两可的问题
其他提示
我做了同样的事情。按顺序添加了“ order_type”字段,并将其显示在网格中。它在Magento Ver 1.7.0.2中完美工作
如何在管理员中添加销售订单网格中的订单类型字段?
1)我们必须使用以下代码创建一个安装SQL文件。
<?php
/* @var $installer Mage_Sales_Model_Entity_Setup */
$installer = $this;
$installer->startSetup();
$installer->run("
ALTER TABLE `{$installer->getTable('sales/order')}` ADD `order_type` VARCHAR(255) NOT NULL;
ALTER TABLE `{$installer->getTable('sales/order_grid')}` ADD `order_type` VARCHAR(255) NOT NULL;
ALTER TABLE `{$installer->getTable('sales/quote')}` ADD `order_type` VARCHAR(255) NOT NULL;
");
$installer->endSetup();
?>
2)Override mage_adminhtml_block_sales_order_grid文件,并在其中添加以下代码。
<?php
class Mycompany_Mymodule_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
protected function _prepareColumns()
{
$options = array(
'ordertypeID1' => 'order type label1',
'ordertypeID2' => 'order type label2',
'ordertypeID3' => 'order type label3',
);
$this->addColumn('order_type', array(
'header' => Mage::helper('customer')->__('Order Type'),
'width' => '100',
'index' => 'order_type',
'type' => 'options',
'options' => $options
));
$this->addColumnsOrder('order_type', 'grand_total');
return parent::_prepareColumns();
}
}
?>
3)创建一个观察者事件以添加/更新订单类型字段值
打开模块/etc/config.xml
<config>
<adminhtml>
<events>
<adminhtml_sales_order_create_process_data>
<observers>
<modulename>
<class>Mycompany_Mymodule_Model_Adminhtml_Observer</class>
<method>adminhtml_sales_order_create_process_data</method>
</modulename>
</observers>
</adminhtml_sales_order_create_process_data>
<sales_convert_quote_to_order>
<observers>
<modulename>
<type>model</type>
<class>Mycompany_Mymodule_Model_Adminhtml_Observer</class>
<method>sales_convert_quote_to_order</method>
</modulename>
</observers>
</sales_convert_quote_to_order>
</events>
</adminhtml>
</config>
4)创建一个观察者文件mycompany_mymodule_model_adminhtml_observer
<?php
class Mycompany_Mymodule_Model_Adminhtml_Observer
{
public function adminhtml_sales_order_create_process_data(Varien_Event_Observer $observer)
{
try {
$requestData = $observer->getEvent()->getRequest();
if (isset($requestData['order']['order_type'])) {
$observer->getEvent()->getOrderCreateModel()->getQuote()
->addData($requestData['order'])
->save();
}
} catch (Exception $e) {
Mage::logException($e);
}
return $this;
}
/**
*
* @param Varien_Event_Observer $observer
* @return Mycompany_Mymodule_Model_Adminhtml_Observer
*/
public function sales_convert_quote_to_order(Varien_Event_Observer $observer)
{
if ($ordertype = $observer->getEvent()->getQuote()->getOrderType()) {
try {
$observer->getEvent()->getOrder()
->setOrderType($ordertype);
} catch (Exception $e) {
Mage::logException($e);
}
}
return $this;
}
}
?>
我使用了以下类似代码。正常工作。
$installer = $this;
$installer->startSetup();
$installer->run("ALTER TABLE sales_flat_order ADD COLUMN barcode VARCHAR(255) NOT NULL;");
$installer->run("ALTER TABLE sales_flat_order_grid ADD COLUMN barcode VARCHAR(255) NOT NULL;");
$installer->run("ALTER TABLE sales_flat_quote ADD COLUMN barcode VARCHAR(255) NOT NULL;");
$installer->endSetup();