Magento新的群众行动

时间:2015-05-26 13:36:57

标签: php magento

我希望使用HTML打印发票,因此通过将app/code/core/Mage/Adminhtml/Block/Sales/Invoice/Grid.php复制到app/code/local/Mage/Adminhtml/Block/Sales/Invoice/Grid.php添加了“打印A4标签”群发操作,并添加了以下代码:

$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错误。

我需要创建哪个文件/目录来处理这个新的批量操作,以及如何处理发送的数据?

更新

应用程序/代码/本地/ 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>

应用程序/代码/本地/ GCT / Printlabel /控制器/ Adminhtml /销售/订购/ 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;        
    }
}

应用程序的/ etc /模块/ GCT_Printlabel.xml

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

应用程序/代码/本地/法师/ Adminhtml /砌块/销售/发票/ Grid.php

...

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

...

我仍然收到404错误。

1 个答案:

答案 0 :(得分:2)

您需要覆盖自定义模块中的销售发票控制器,并创建名为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 希望这会有所帮助!!