magento не может переопределить базовую модель - PullRequest
8 голосов
/ 22 января 2012

Прежде всего, я прошу прощения за то, что задал еще один вопрос "magento core override", но я выполнил около 10 учебных пособий и прочитал почти все подобные вопросы, опубликованные здесь, но безуспешно.

Я должен переопределитькуча базовых моделей и классов.Код работает, потому что я уже сменил ядро ​​(на тестовом сайте magento), и он работал отлично.Но время от времени доступно обновление magento, и если мы будем применять эти обновления, все мои изменения будут потеряны.Поэтому я должен переопределить базовый код.Я хочу сделать свой собственный модуль для добавления всего необходимого кода, потому что мне нужно только переопределить 1 или 2 функции в каждом классе, остальные должны работать так, как задумал Magento.

Моя первая попытка была переопределитькласс Mage_Sales_Model_Order_Pdf_Invoice .Итак, я сделал свой модуль.Структура файла:

app / code / local / [пространство имен] /Sales/etc/config.xml

app / code / local / [namespace] /Sales/Helper/Data.php (Этот класс ничего не делает, это просто пустой класс. Я сделал это потому, что где-то читал, что Magento иногда не распознает модуль, если нет класса Helper)

app / code / local / [namespace] /Sales/Model/Order/Pdf/Invoice.php

app / etc / modules / [namespace] _Sales.xml

Файл [namespace] _Sales.xml выглядит следующим образом:

<?xml version="1.0"?>
    <config>
        <modules>
            <[namespace]_Sales>
                <active>true</active>
                <codePool>local</codePool>
            </[namespace]_Sales>
        </modules>
    </config>

Файл config.xml выглядит следующим образом:

< ?xml version="1.0"?>
  <config>
    <modules>
        <[namespace]_Sales>
            <version>0.1.0</version>
        </[namespace]_Sales>
    </modules>
    <global>
    <helpers>
            <sales>
                <class>[namespace]_Sales_Helper</class>
            </sales>
        </helpers>
       <models>
          <sales>
              <rewrite>
                  <order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice>
              </rewrite>
          </sales>
       </models>
    </global>
</config>

И файл Invoice.php выглядит следующим образом:

<?php

 /****I'm adding some different classes here*******************************/
 include_once Mage::getBaseDir('lib')."/myclass.php";
 include_once Mage::getBaseDir('lib')."/another_library.php";
 /********************************************************/

class [namespace]_Sales_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice
{
    public function getPdf($invoices = array())
    {
         //my code
    }


}

Я хотел сначала проверить это, прежде чем перейти и переопределить все остальные контроллеры и модели, которые мне нужно изменить.

Проблема в том, что он все еще использует оригинальную модель.

Я думаю, что код модуля и пути верны, потому что magento находит мою пользовательскую модель.Я проверил, зайдя в бэкэнд и посмотрел на Система-> Конфигурация-> Дополнительно

Я полностью очистил кеш, так что это не так.

Я использовал get_class дляопределить, какая модель возвращается в контроллере: get_class (Mage :: getModel ('sales / order_pdf_invoice')) , это возвращает Mage_Sales_Model_Order_Pdf_Invoice

Я не знаю, гдеЯ сделал ошибку, но я уверен, что я сделал одну: (

1 Ответ

7 голосов
/ 22 января 2012

Есть некоторые ошибки, которые я обнаружил буквально.Пожалуйста, исправьте эти ошибки: -

Все файловые структуры, которые вы упомянули в вопросе в пуле кода "local", имеют отсутствующее имя папки "code" внутри "appпапка.Таким образом, каждая файловая структура вашего локального модуля должна выглядеть следующим образом: "app/code/local/[namespace]/Sales/..." .

Если эта структура папок неверна, то также ваш [namespace]_Sales модульможет работать не так, как ожидалось.

Во-вторых, содержимое файла "config.xml" немного неправильное.Правильный будет: -

<?xml version="1.0"?>
<config>
  <modules>
    <[namespace]_Sales>
      <version>0.1.0</version>
    </[namespace]_Sales>
  </modules>

  <global>
    <helpers>
      <!--
      This node will be the unique identifier of your module,
      and it will be used every time your code requires referencing your own module.
      This shouldn't clash with other unique identifiers used in your Magento system.
      Normally all the characters are kept in small case for this,
      however, I haven't tried with the upper case.
      But it will be best to keep your unique identifier in small case only.
      -->
      <[namespace]sales>
        <class>[namespace]_Sales_Helper</class>
      </[namespace]sales>
    </helpers>

    <models>
      <!--
      If this is not provided, then Magento will not know your module's starting part of Model Class Names.
      -->
      <[namespace]sales>
        <class>[namespace]_Sales_Model</class>
      </[namespace]sales>
      <sales>
        <rewrite>
          <order_pdf_invoice>[namespace]_Sales_Model_Order_Pdf_Invoice</order_pdf_invoice>
        </rewrite>
      </sales>
    </models>
  </global>
</config>

Кроме того, я не думаю, что вам потребуется добавлять различные классы здесь (что вы сделали на странице PHP класса "[namespace]_Sales_Model_Order_Pdf_Invoice").Это связано с тем, что Magento автоматически загружает все определения связанных библиотек (некоторые примеры библиотечных классов: «Varien» и «Zend»).Вам просто нужно создать объект из этих библиотечных классов, и вы сможете полностью использовать методы.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...