Magento 新的大规模行动

Magento new mass action

我希望使用 HTML 打印发票,因此添加了 'Print A4 Label' 批量操作,将 app/code/core/Mage/Adminhtml/Block/Sales/Invoice/Grid.php 复制到 app/code/local/Mage/Adminhtml/Block/Sales/Invoice/Grid.php 并添加了以下代码:

$this->getMassactionBlock()->addItem('printa4label', array(
  'label'=> Mage::helper('sales')->__('Print A4 Label'),
  'url'  => $this->getUrl('*/sales_invoice/printa4label'),
));

这添加了指向 index.php/admin/sales_invoice/printa4label/key/... 的批量操作选项,该选项目前出现 404 错误。

我需要创建什么 file/directory 来处理这个新的大规模操作,我如何处理发送的数据?


更新

app/code/local/GCT/Printlabel/etc/config.xml

<?xml version="1.0"?>
<config>
        <admin>
                <routers>
                        <adminhtml>
                                <args>
                                        <modules>
                                                <GCT_Printlabel before="Mage_Adminhtml">GCT_Printlabel_Adminhtml</GCT_Printlabel>
                                        </modules>
                                </args>
                        </adminhtml>
                </routers>
        </admin>
</config>

app/code/local/GCT/Printlabel/controllers/Adminhtml/Sales/Order/InvoiceController.php

<?php
require_once 'Mage/Adminhtml/controllers/Sales/Order/InvoiceController.php';
class GCT_Printlabel_Adminhtml_Sales_Order_InvoiceController extends Mage_Adminhtml_Sales_Order_InvoiceController
{
    public function printlabelAction()
    {
    echo "Hello World";
    exit;        
    }
}

app/etc/modules/GCT_Printlabel.xml

<?xml version="1.0"?>
<config>
    <modules>
        <GCT_Printlabel>
            <active>true</active>
            <codePool>local</codePool>
        </GCT_Printlabel>
    </modules>
</config>

app/code/local/Mage/Adminhtml/Block/Sales/Invoice/Grid.php

...

$this->getMassactionBlock()->addItem('printlabel', array(
    'label'=> Mage::helper('sales')->__('Print Label'),
    'url'  => $this->getUrl('*/sales_invoice/printlabel'),
));

...

我仍然收到 404 错误。

您需要覆盖自定义模块中的销售发票控制器并创建一个名为 printlabel 的操作

目前这个控制器没有 printlabelAction() 所以它会抛出 404 错误。

基本上是在InvoiceController.php

中寻找printlabelAction()

原始控制器文件位于此处:app\code\core\Mage\Adminhtml\controllers\Sales\InvoiceController.php

永远不要更改核心文件是一个好习惯。因此你应该重载控制器。

您可以从这里获取在自定义模块中重载控制器的步骤:http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/how_to_overload_a_controller

在您的自定义模块中重载控制器后,打开该文件并添加以下内容进行测试:

public function printlabelAction() {
echo "Hello World";
exit;
} 

更新: Grid.php

$this->getMassactionBlock()->addItem('printlabel', array(
                 'label'=> Mage::helper('sales')->__('My Custom Print'),
                 'url'  => $this->getUrl('*/sales_order_invoice/printlabel'),
            ));

config.xml 文件:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <GCT_Printlabel before="Mage_Adminhtml">GCT_Printlabel_Adminhtml</GCT_Printlabel>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

注意上面代码中的GCT_Printlabel_Adminhtml。确保控制器文件放置在正确的文件夹结构中。它应该在 GCT/Printlabel/controllers/Adminhtml/Sales/Order/InvoiceController.php

确保您在任何地方都使用正确的大小写以避免与区分大小写相关的问题。

require_once 'Mage/Adminhtml/controllers/Sales/Order/InvoiceController.php';
class GCT_Printlabel_Adminhtml_Sales_Order_InvoiceController extends Mage_Adminhtml_Sales_Order_InvoiceController
{
    public function printlabelAction()
    {
    echo "Hello World";
    exit;        
    }
}

清除所有 Magento 缓存和您的浏览器缓存,然后 运行 您的批量操作。它将显示 "Hello World" 消息。

也尽量避免在以后的模块名称中使用多个大写字母。这有时会导致问题。 PrintA4Label 应该是 Printa4label 希望这对您有所帮助!!