Magento管理自定义按钮查看订单


Magento Admin Custom Button on View Order

我正在尝试在Magento View Order页面上创建一个按钮,当我点击它时,它将使用包含在订单和订单中的项目上的信息向某个供应商发送电子邮件。

我已经成功创建了模块和按钮,我可以点击按钮,它会显示一个警告类型的消息。但是我不知道如何让按钮执行动作。当前按钮只是指向一个URL。

我有:

MG_Dropship.xml

    <?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <MG_Dropship>
            <!-- Whether our module is active: true or false -->
            <active>true</active>
            <!-- Which code pool to use: core, community or local -->
            <codePool>local</codePool>
        </MG_Dropship>
    </modules>
</config>

config . xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <MG_Dropship>
            <version>0.0.1</version>
        </MG_Dropship>
    </modules>
    <!-- Configure our module's behavior in the global scope -->
    <global>
    <blocks>
         <adminhtml>
            <rewrite>
                <sales_order_view>MG_Dropship_Block_Adminhtml_Sales_Order_View</sales_order_view>
            </rewrite>
        </adminhtml>
    </blocks>
    </global>
</config>

View.php

<?php
class MG_Dropship_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Sales_Order_View {
    public function  __construct() {
        parent::__construct();
        $this->_addButton('dropship', array(
            $message = "Are you sure you want to dropship?",
            'label'     => Mage::helper('Sales')->__('Dropship'),
            'onclick'   => "confirmSetLocation('{$message}','{$this->getUrl('MG_Dropship')}')"
        ));
    }
}

模块中的一切看起来都很好。要获得所需的附加功能,需要添加下面的代码来覆盖Sales Order控制器来处理url。

在您的config.xml中设置管理路由器,如下所示:

<config>
...
   <admin>
        <routers>
           <adminhtml>
               <use>admin</use>
               <args>
                    <modules>
                        <dropship before="Mage_Adminhtml_Sales">MG_Dropship_Adminhtml</dropship>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
...
</config>

接下来,您需要设置Adminhtml控制器。这将回答您在按钮的onclick部分中定义的getUrl()。

创建一个名为OrderController.php的文件并将其放置在app/code/local/MG/Dropship/controllers/Adminhtml/Sales/中。在文件中放入以下代码:

include_once Mage::getModuleDir('controllers', 'Mage_Adminhtml') . DS . 'Sales' . DS . 'OrderController.php';  //  Some people use the full path but this is the most Magento-friendly way to do it.
class MG_Dropship_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController {
    public function dropshipAction() {
         //  Put all of your code for exporting and e-mailing your order here.
         //  You can use Mage::app()->getRequest()->getParam('order_id') to pull the order_id here.
         echo 'Your button works!';exit();  // This is just to test that your button actually works.  You should see a screen with this message and nothing else when you click the button.
    }
}

现在您需要更改按钮的getUrl()部分。应该是:

$this->_addButton('dropship', array(
        $message = "Are you sure you want to dropship?",
        'label'     => Mage::helper('Sales')->__('Dropship'),
        'onclick'   => "confirmSetLocation('{$message}','{$this->getUrl('*/*/dropship')}')"
    ));