magento не может переопределить базовую модель

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

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

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

Приложение / код / местные / [имена] /Sales/etc/config.xml

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

Приложение / код / местные / [имена] /Sales/Model/Order/Pdf/Invoice.php

приложение / и т.д. / модули / [имена] _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 находит мою собственную модель. Я проверил, войдя в бэкэнд и посмотрел на System-> configuration-> advanced

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

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

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

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

Все структуры файлов, которые вы упомянули в вопросе в « 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 »). Вам просто нужно создать объект этих классов библиотек, и вы сможете полностью использовать эти методы.

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