Magento 1.7覆盖Pdf类

时间:2012-11-06 15:05:27

标签: magento magento-1.7

我试图覆盖Pdf类来更改发票/发货/ Creditmemo pdf,但它似乎没有反映出来。

我在Mymodule / etc / config.xml

中创建了一个带有以下内容的模块
<config>
<modules>
    <Mymodule_Printtemplates>
        <version>0.1.0</version>
    </Mymodule_Printtemplates>
</modules>
<global>
    <models>
        <sales>
            <rewrite>
                <order_pdf_abstract>Mymodule_Printtemplates_Model_Order_Pdf_Abstract</order_pdf_abstract>
                <order_pdf_invoice>Mymodule_Printtemplates_Model_Order_Pdf_Invoice</order_pdf_invoice>
                <order_pdf_creditmemo>Mymodule_Printtemplates_Model_Order_Pdf_Creditmemo</order_pdf_Creditmemo>
                <order_pdf_shipment>Mymodule_Printtemplates_Model_Order_Pdf_Shipment</order_pdf_shipment>
            </rewrite>
        </sales>
    </models>
</global>

然后我在Mymodule / models /中创建了以下Model类 如Abstract.php,Invoice.php,Shipment.php,Creditmemo.php

abstract class Mymodule_Printtemplates_Model_Order_Pdf_Abstract extends Mage_Sales_Model_Order_Pdf_Abstract

class  Mymodule_Printtemplates_Model_Order_Pdf_Invoice extends  Mymodule__Printtemplates_Model_Order_Pdf_Abstract { ... functions here ...}

class Mymodule_Printtemplates_Model_Order_Pdf_Shipment extends Mymodule__Printtemplates_Model_Order_Pdf_Abstract{ ... functions here ...}

class Mymodule_Printtemplates_Model_Order_Pdf_Creditmemo  extends  Mymodule__Printtemplates_Model_Order_Pdf_Abstract{ ... functions here ...}

模块已启用 - 我已通过系统&gt;配置&gt;管理&gt;高级检查了它,但它似乎没有反映更改

另一方面,如果我将Mage / Sales / Model / Order / Pdf / *。php粘贴到本地并进行更改,则会反映出更改。我知道这不是推荐的方法,但通过重写类的方法似乎不起作用。

通过类重写对第一种方法的任何帮助都将不胜感激。

谢谢, Loveleen


真正的问题是etc / config.xml中出现错误的语法[参见结束标记中的Capital C]

  

Mymodule_Printtemplates_Model_Order_Pdf_Creditmemo

我使用以下方法调试问题:将它放在index.php的底部,类似于Alans模块列表,但是快速代码复制/粘贴方法。请记住,Magento的所有XML都被合并到一个XML树中。

header(“Content-Type:text / xml”);模具(法师::应用程序() - &GT; getConfig() - &GT; getNode() - &GT; asXML());

取自How do I know whether my Config.xml file is working in Magento?

的答案

2 个答案:

答案 0 :(得分:2)

以下是我看到的一些事情。

  1. 每个被覆盖文件的文件路径是什么?它们应该是:Mymodule/Printtemplates/Model/Order/Pdf/Invoice.php,例如。类名应与文件名匹配。
  2. 重写不会影响抽象类,除非使用工厂方法调用抽象类(不推荐)。重写的工作方式是通过工厂方法(Mage::getModel(''))。使用工厂方法允许Magento查看系统以查看是否需要使用另一个类。但是,当一个类被硬引用(e.x。Mage_Sales_Model_Order_Pdf_Abstract)时,它不会通过工厂方法,因此不会发生重写。
  3. 我会考虑让每个类扩展其原始类(e.x. Mage_Sales_Model_Order_Pdf_Invoice等)。如果你有额外的常用功能,你可以将它们放入Helper。
  4. 要查看代码是否被调用,请在文件中放入已知代码错误。 PHP会抱怨,这会告诉你正在加载你的文件。

答案 1 :(得分:2)

我使用以下方法调试问题: 将它放在index.php的底部,类似于Alans模块列表,但是快速代码复制/粘贴方法。请记住,Magento的所有XML都被合并到一个XML树中。

header(“Content-Type:text / xml”); 模具(法师::应用程序() - &GT; getConfig() - &GT; getNode() - &GT; asXML());

取自How do I know whether my Config.xml file is working in Magento?

的答案