我希望使用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错误。
答案 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 希望这会有所帮助!!