2014-03-26 1 views
0

В классе Invoice.php есть функция sendEmail в приложении \ code \ core \ Mage \ Sales \ Model \ Order \ Invoice.php, который я хотел изменить, поэтому я решил расширить класс и внести изменения в локальный модуль.Проблемы возникают при расширении приложения code core Mage Sales Model Order Invoice.php class

Я начал с создания каталога на сервере под названием

/public_html/приложение/код/​​местные/MyModule

Затем я добавил config.xml следующим образом: -

/public_html/приложение/код/​​местные/MyModule/Продажи/и т.д., которая имеет следующий config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Mymodule_Sales> 
      <version>0.1</version> 
     </Mymodule_Sales> 
    </modules> 
    <global> 
     <models> 
      <sales> 
       <rewrite> 
        <order_invoice>Mymodule_Sales_Model_Order_Invoice</order_invoice> 
       </rewrite> 
      </sales> 
     </models> 
    </global> 
</config> 

затем я создал другую папку следующим

/public_html/приложение/код/​​местные/MyModule/Продажа/Модель

который находится Invoice.php

<?php 
class Mymodule_Sales_Model_Order_Invoice extends Mage_Sales_Model_Order_Invoice 
{ 
    /** 
    * Send email with invoice data 
    * 
    * @param boolean $notifyCustomer 
    * @param string $comment 
    * @return Mage_Sales_Model_Order_Invoice 
    */ 
    public function sendEmail($notifyCustomer = true, $comment = '') 
    { 

Я отключил исходную функцию в исходном классе, и когда я пытаюсь отправить электронная почта это дает мне ошибку.

Что я делаю неправильно?

ответ

0

Расскажите, пожалуйста, конкретно сообщение об ошибке вы получаете, но на первый взгляд, вы должны поместить файл Invoice.php в папку/Order так полный путь таков:

 /public_html/app/code/local/Mymodule/Sales/Model/Order/Invoice.php 

В вашем случае , где модуль также переписывает эту функцию (комментарии ниже), вам нужно быть осторожным в том, как Magento загружает файл config.xml. Два модуля не могут переписать одну и ту же функцию, но вы можете построить цепочку наследования. Таким образом, Oeditor_Ordereditor_Model_Order_Invoice может продлить Mage_Sales_Model_Order_Invoice, а затем ваш Mymodule_Sales_Model_Order_Invoice может распространяться Oeditor_Ordereditor_Model_Order_Invoice. Затем, чтобы убедиться, что Magento загружает эту зависимость в правильном порядке, XML, вам нужно положить в ваш модуле конфигурации приложения/и т.д./модули/Mymodule_Sales.xml является <depends> узлом:

<config> 
    <modules> 
     <Mymodule_Sales> 
      <active>true</active> 
      <codePool>local</codePool> 
      <depends> 
       <Mage_Sales /> 
       <Oeditor_Ordereditor /> 
      </depends> 
     </Mymodule_Sales> 
    </modules> 
</config> 

Смотрите второй ответ here для Справка.

Будьте осторожны при управлении наследованием. Вы можете использовать parent :: для управления передачей для Oeditor_Ordereditor и the genius of Alan Storm has a comprehensive article on using parent:: in rewrites, поэтому я думаю, что стоит снова перечитать эту статью.

+0

Файл находится в пути, который вы определили –

+0

Invalid метод Oeditor_Ordereditor_Model_Order_Invoice :: SendEmail (Array ( [0] => 1 [1] => ) ) –

+0

Существует аналогичный пост здесь HTTP: //stackoverflow.com/questions/8961737/magento-cannot-override-core-model –