0

Invoice/Shipment/Creditmemo pdf に変更を加えるために 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 ...}

モジュールは有効になっています - System>Configuration>Admin>Advanced で確認しましたが、変更が反映されていないようです

一方、Mage/Sales/Model/Order/Pdf/*.php をローカルにコピーペーストして変更すると、変更が反映されます。これは推奨される方法ではないことはわかっていますが、クラスを書き換える方法はうまくいかないようです。

クラスの書き換えによる最初のメソッドの助けをいただければ幸いです。

ありがとう、ラブリーン


本当の問題は、etc/config.xml の Syntax in error でした [終了タグの大文字 C を参照]

Mymodule_Printtemplates_Model_Order_Pdf_Creditmemo

私は問題をデバッグするために以下を使用しました: これを index.php の一番下にドロップします。これは Alans モジュール リストに似ていますが、コードをすばやくコピーして貼り付ける方法です。Magento のすべての XML が 1 つの XML ツリーに結合されることを思い出してください。

header("Content-Type: テキスト/xml"); die(Mage::app()->getConfig()->getNode()->asXML());

次の回答から取得: Config.xml ファイルが Magento で機能しているかどうかを知るにはどうすればよいですか?

4

2 に答える 2

2

私は問題をデバッグするために以下を使用しました: これを index.php の一番下にドロップします。これは Alans モジュール リストに似ていますが、コードをすばやくコピーして貼り付ける方法です。Magento のすべての XML が 1 つの XML ツリーに結合されることを思い出してください。

header("Content-Type: テキスト/xml"); die(Mage::app()->getConfig()->getNode()->asXML());

次の回答から取得: Config.xml ファイルが Magento で機能しているかどうかを知るにはどうすればよいですか?

于 2012-11-14T22:34:17.503 に答える
2

ここに私が見ているいくつかのことがあります。

  1. オーバーライドされた各ファイルへのファイル パスは何ですか? たとえばMymodule/Printtemplates/Model/Order/Pdf/Invoice.php、 です。クラス名はファイル名と一致する必要があります。
  2. 抽象クラスがファクトリ メソッドで呼び出されない限り、書き換えは抽象クラスに影響しません (推奨されません)。書き換えが機能する方法は、ファクトリ メソッド ( Mage::getModel('')) を使用することです。ファクトリ メソッドを使用すると、Magento はシステムを調べて、別のクラスを使用する必要があるかどうかを確認できます。ただし、クラスがハード参照されている場合 (例Mage_Sales_Model_Order_Pdf_Abstract)、ファクトリ メソッドを通過しないため、そのクラスの書き換えは発生しません。
  3. 各クラスを元のクラス (exMage_Sales_Model_Order_Pdf_Invoiceなど) に拡張することを検討します。余分な共通関数がある場合は、それらをヘルパーに入れることができます。
  4. コードが呼び出されているかどうかを確認するには、既知のコード エラーをファイルに入れます。PHP がエラーを表示し、ファイルがロードされていることを示します。
于 2012-11-07T03:09:00.837 に答える