Php 向Magento管理员添加搜索字段
有没有办法在Magento管理员的“订单”下添加新的搜索字段?我希望能够按优惠券代码使用情况进行搜索(例如:按优惠券代码搜索:“sale2013”,在结帐时列出应用该优惠券代码的所有订单)Php 向Magento管理员添加搜索字段,php,mysql,magento-1.7,magento,Php,Mysql,Magento 1.7,Magento,有没有办法在Magento管理员的“订单”下添加新的搜索字段?我希望能够按优惠券代码使用情况进行搜索(例如:按优惠券代码搜索:“sale2013”,在结帐时列出应用该优惠券代码的所有订单) 我可以从Magento数据库中提取这些数据,但我真的希望将此功能添加到Magento管理员中,以使同事和老板更轻松。可以这样做吗?如果可以,我可以从哪里开始?谢谢各位。当客户退房时,结账时使用的优惠券代码存储在主订单表(sales\u flat\u order)中。如果没有值,则不使用优惠券代码。但是,管理
我可以从Magento数据库中提取这些数据,但我真的希望将此功能添加到Magento管理员中,以使同事和老板更轻松。可以这样做吗?如果可以,我可以从哪里开始?谢谢各位。当客户退房时,结账时使用的优惠券代码存储在主订单表(
sales\u flat\u order
)中。如果没有值,则不使用优惠券代码。但是,管理中网格的数据来自销售\平面\订单\网格
表;它来自那里,而不是主订单表,因为性能原因在流量非常高的站点上变得尤为明显
现在我们知道了需要过滤的数据在哪里,以及网格的数据来自哪里,我们可以继续构建它了
您需要做的第一件事是将优惠券代码
列添加到sales\u flat\u order\u网格
表格中,该表格与sales\u flat\u order
表格上的列定义相匹配。当匹配列出现并且缓存已刷新后,销售平仓订单
的优惠券代码
列中的值应自动填充到销售平仓订单网格
数据在订单保存时更新,因此具体来说,新订单和通过管理员更新的订单(甚至是订单上的注释)将填充数据。对于现有订单,运行数据升级脚本将值复制到
在数据/模式就位后,您需要让网格为其显示一个可过滤列。为此,您需要从您的自定义模块中重写Mage\u Adminhtml\u Block\u Sales\u Order\u Grid
类(请不要直接编辑核心文件,稍后会困扰您),并使用包含列定义的方法覆盖\u prepareColumns
方法:
$this->addColumn('coupon_code', array(
'header' => Mage::helper('sales')->__('Coupon Code'),
'index' => 'coupon_code',
));
如果您对Magento开发非常了解,我敢说我才刚刚开始帮助您。但您将有大量的参考点,可以从中挖掘并构建所需的功能。嗯!:) 使用此扩展将新列添加到网格很容易: 添加此扩展,在etc目录中使用
gridcontrol.xml
编写自己的扩展
然后像这样的事情应该会起作用:
<?xml version="1.0"?>
<gridcontrol>
<grids>
<order.grid>
<coupon_code>
<after>columnname</after>
<add>
<header>Coupon code</header>
<type>text</type>
<index>coupon_code</index>
<joinField>coupon_code|sales/order|coupon_code|entity_id=entity_id||left</joinField>
</add>
</coupon_code>
</order.grid>
</grids>
</gridcontrol>
列名
优惠代码
文本
优惠券代码
优惠券代码|销售/订单|优惠券代码|实体| id=实体| id |左
您可以使用的每个网格都有一个事件。不需要重写。除非我弄错了,否则不会从\u prepareColumns
触发任何事件。你想做什么?你是对的。没有事件(TIL),但您可以从布局文件中调用addColumnAfter:这是一个糟糕的解决方案,因为从长远来看,它会影响性能。不应该将值连接到sales order grid上,为了保持性能,sales order grid特意设置为在一个平面表上运行(没有连接)。这一点很好,但在两个entity_id列上都是索引,我不认为这是一个大问题@davidalger