【问题标题】:Magento 1.7 overriding classMagento 1.7 重写类
【发布时间】:2012-12-19 15:25:05
【问题描述】:

我正在尝试覆盖 magento 类

class Mage_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Action

我创建了一个director和文件local/myModules/Adminhtml/Controller/Sales/Invoice.php,它的代码是。

include_once("Mage/Adminhtml/controller/Sales/Invoice.php");


class myModules_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Sales_Invoice
{
    public function printAction()
   {
    echo "child class";exit;
    if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
        if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
            $pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
            $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
                '.pdf', $pdf->render(), 'application/pdf');
        }
    }
    else {
        $this->_forward('noRoute');
    }
  }
}

而local/myModules/Adminhtml/config.xml是

  <?xml version="1.0"?>
  <config>
<modules>
    <myModules_Adminhtml>
        <version>1.1</version>
    </myModules_Adminhtml>
</modules>


<global>
        <blocks>
            <adminhtml>
                <rewrite>
                  <sales_order_view>myModules_Adminhtml_Block_Sales_Order_View</sales_order_view>
                </rewrite>
            </adminhtml>
        </blocks>
    </global>

<admin>
        <routers>
            <adminhtml> 
                <use>admin</use>
                <args>
                    <modules> 
                        <myModules_Adminhtml before="Mage_Adminhtml">myModules_Adminhtml</myModules_Adminhtml>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

在浏览器中我有网址

/index.php/admin/sales_order_invoice/print/invoice_id/49191/

但不显示“子类”;

实际上我想覆盖发票打印功能。我在 XML 中缺少什么?

【问题讨论】:

  • 你刷新缓存了吗?也可能是 acl(权限)问题
  • 你不能使用&lt;rewrite&gt;指令重写控制器,尤其是放在global/blocks。此外,您应该使用 CamelCase 表示法命名您的模块,否则自动加载器可能不会加载类。

标签: php magento overriding


【解决方案1】:

1) 'myModules' 应该是MyModules

2) 由于您使用的是&lt;myModules_Adminhtml before="Mage_Adminhtml"&gt;

替换

class Mage_Adminhtml_Controller_Sales_Invoice extends Mage_Adminhtml_Controller_Action

include_once Mage::getModuleDir('controllers', 'Mage_Adminhtml') . DS . 'Sales' . DS . 'InvoiceController.php';

class MyModules_Adminhtml_Sales_InvoiceController extends Mage_Adminhtml_Sales_InvoiceController{
    ...
}

阅读更多@

The Basics Of Creating A Magento Module

How to overload a controller

Magento: Overriding Core Files (Blocks, Models, Resources, Controllers)

【讨论】:

  • 我认为Mage::getModuleDir('controllers', 'Mage_Adminhtml') 将指向app/code/core/Mage/Adminhtml/controllers/。这对Mage_Adminhtml_Controller_Sales_Invoice 来说是错误的——正确的路径是app/code/core/Mage/Adminhtml/Controller/。您引用了不同的文件(Mage_Adminhtml_Sales_InvoiceControllerMage_Adminhtml_Controller_Sales_Invoice)。
猜你喜欢
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2014-01-13
相关资源
最近更新 更多