2012-04-11 5 views
1

Я знаю, как переопределить классы Мага (любой класс в пределах app/code/core) Мой вопрос в том, как переопределить классы Varien? (классы в рамках lib/Varien)Могу ли я переопределить классы Magento Varien?

Если я хочу, чтобы переопределить Mage_Adminhtml_Block_Page_Menu создать класс MyCompany_Adminhtml_Block_Page_Menu под app/code/local/MyCompany/Adminhtml/Block/Page/Menu.php

Я называю это нравится:

class MyCompany_Adminhtml_Block_Page_Menu extends Mage_Adminhtml_Block_Page_Menu 

Теперь Magento использует мой класс MyCompany_Adminhtml_Block_Page_Menu вместо Mage_Adminhtml_Block_Page_Menu

Мой вопрос: где я должен поместить новый класс и как его назвать, переопределить, для Пример Varien_Date (lib/Varien/Date.php)

Благодаря

+0

Извините, что не согласен, но скопировать на локальный язык не является приемлемым способом переопределения ядра Magento – OSdave

ответ

9

Если вы должны, скопируйте файл и путь к местного codepool и внести необходимые изменения. Для изменения имени класса нет конфигурационного сопоставления.

Объяснение: см. Загрузку в приложение/Mage.php. Существует порядок нагрузки, установленные для codepools и библиотек в следующем порядке:

  1. приложения/код/​​местные/
  2. приложение/код/​​сообщества/
  3. приложение/код/​​ядро/
  4. Библиотека/

Как правило, Varien_Autoload отвечает за отображение названий класса, такие как Varien_Data_Collection_Db, Mage_Core_Model_Abstract или Zend_Db_Select относительных имена файлов (Varien/Data/Коллекция/DB.php, Mage/Ядро/Модель/Abstract.php и Zend/Db/Select. php соответственно). Эти расположения файлов затем передаются в include(), который внутренне использует порядок загрузки, заданный в бутстрапе. Поэтому, если файл Varien/Data/Collection/Db.php присутствует в одном из «ранних» местоположений, , то будет использоваться версия определения класса.

Эти типы модификаций могут быть оправданы, но они должны быть хорошо продуманными и документированными, поскольку все определение будет принадлежать вам, и любые обновления должны будут быть объединены в будущем. Было бы хорошо знать, что вы хотели бы изменить, поскольку у кого-то может быть немного менее инвазивный вариант.

+0

. Спасибо, мои изменения должны быть в моей папке модуля, потому что я создаю распространяемый модуль. – skafandri

+1

@skafandri, если вам нужно изменить ядро, вы, вероятно, ошибаетесь –

+0

Точно!Я определенно не хочу менять ядро, я просто хочу переопределить некоторые классы, я точно хочу переопределить некоторые методы toHtml(). – skafandri

Смежные вопросы