0

我必须在订单视图中放置一个按钮,该按钮将进一步发送订单 ID。id 将用于简单的数据库查询,然后它应该返回到订单视图。

我发现了如何创建按钮,我是app/code/local/Mage/Adminhtml/Block/Sales/Order/View.php在核心的 view.php 之后创建的。

这是我的代码:

class Mage_Adminhtml_Block_Sales_Order_View extends
   Mage_Adminhtml_Block_Widget_Form_Container
    {

    public function __construct()
    {
        $this->_objectId    = 'order_id';
        $this->_controller  = 'sales_order';
        $this->_mode        = 'view';

        parent::__construct();

        $this->_removeButton('delete');
        $this->_removeButton('reset');
        $this->_removeButton('save');
        $this->setId('sales_order_view');
        $order = $this->getOrder();

        $this->_addButton('release_payment', array(
                'label' => Mage::helper('sales')->__('Release Payment'),
                'onclick' => 'setLocation(\'' . $this->getUrl('*/*/release') . '\')',
                'class' => 'go'
            ));
    }

我想要的是这个位置应该是 sales_order/release 来实际使用订单 ID 做一些事情。我试图了解如何,但我无法实际创建控制器。

4

1 回答 1

0

您可能应该将这些覆盖收集到一个模块中。否则,丑陋的方法是复制

app/code/core/Mage/Adminhtml/controllers/OrderController.php

app/code/local/Mage/Adminhtml/controllers/OrderController.php

并将releaseAction()-function 添加到它。

对于更优雅的解决方案,您需要在其etc/config.xml文件中创建一个带有配置选项的模块,以覆盖/重载指定的块和控制器代码。使用这种方法可以更好地包含您的更改,并且可以轻松打开/关闭模块。此外,在扩展原始块/控制器时,除了修改/添加的方法之外,您不需要包含任何其他内容,其余部分将从原始文件执行。

实际上,即使是 Magento 的主要文档也有不错的示例: http: //www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

并且谷歌搜索magento controller overload也给出了很好的结果,所以我不会在这里给出一个冗长的例子。

于 2014-03-26T16:08:25.200 回答