Php 向Magento管理员添加搜索字段

Php 向Magento管理员添加搜索字段,php,mysql,magento-1.7,magento,Php,Mysql,Magento 1.7,Magento,有没有办法在Magento管理员的“订单”下添加新的搜索字段?我希望能够按优惠券代码使用情况进行搜索(例如:按优惠券代码搜索:“sale2013”,在结帐时列出应用该优惠券代码的所有订单) 我可以从Magento数据库中提取这些数据,但我真的希望将此功能添加到Magento管理员中,以使同事和老板更轻松。可以这样做吗?如果可以,我可以从哪里开始?谢谢各位。当客户退房时,结账时使用的优惠券代码存储在主订单表(sales\u flat\u order)中。如果没有值,则不使用优惠券代码。但是,管理

有没有办法在Magento管理员的“订单”下添加新的搜索字段?我希望能够按优惠券代码使用情况进行搜索(例如:按优惠券代码搜索:“sale2013”,在结帐时列出应用该优惠券代码的所有订单)


我可以从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