Как переопределить основные классы?
Иногда возникает необходимость переопределить основные классы, чтобы получить больше функциональности или заставить некоторые основные функции работать по-другому. Есть ли способ переопределить основные классы? Если возможно, какие проблемы я могу решить, переопределив их?
4 ответа
Да, это возможно.
Вы можете использовать системный плагин для переопределения классов, пожалуйста, прочитайте эту ссылку и this и this
Две проблемы, с которыми вы столкнетесь:
-
вам нужно переопределить весь класс (а не только его части)
-
, если ядро обновлено и класс также обновлен /изменен, вам необходимо обновить переопределение (если необходимо).
Я создал плагин некоторое время назад, что позволяет вам переопределять основные классы, но он по-прежнему становится жертвой проблем, о которых @jackJoe указал в своем ответе. Тем не менее, это позволяет вам делать переопределения чисто.
Я был на этом очень долго и обещал Дону, что, как только я закончу, вы получите более подробную информацию об этом.
Мне нужно было переопределить Joomla MVC для компонентов и сообщить Joomla о том, чтобы искать переопределения в моей папке html для плагинов, а не только внутри папки шаблона html.
Мне никогда не нравилось, когда разработчики фактически принимают класс по умолчанию Joomla и беспорядок с ним, поэтому я предпочитаю расширить этот класс, если смогу, вместо того, чтобы что-то тормозить.
Мой процесс делает следующее.
- Получить класс, который необходимо переопределить
- Прочитайте, замените имя класса, создайте новый файл в папке temp class
- Загрузите мою версию класса
- Загрузить класс Joomla
- Зарегистрируйте мой метод расширения, который расширяет функцию loadTemplate для поиска переопределения в моем плагине, чем шаблон joomla и последний компонент joomla
вот изображение http://prntscr.com/3d9syq
Первые части нижеприведенного фрагмента проверяют, где находится пользователь, если он собирается обновить Joomla. Я удаляю файлы temp-класса, которые были созданы, чтобы убедиться, что мы получим свежие, когда обновление завершено, чем будет выполнено от JackJoe № 2.
if (($this->Input('option') == 'com_joomlaupdate' && $this->Input('task') == 'update.install') || ($this->Input('option') == 'com_joomlaupdate' && $this->Input('layout') == 'complete')) {
JFolder::delete(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
JFolder::create(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
$indexContent = '';
JFile::write(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/index.html', $indexContent);
}
$YjsgJViewDefaultRead = JPATH_LIBRARIES . '/legacy/view/legacy.php';
$YjsgJViewDefaultFile = YJSGEXTEND . "classes" . YJDS . "Yjsg" . $isView . "Default" . $IsJversion . ".php";
//extend JView library class
if (!JFile::exists($YjsgJViewDefaultFile)) {
$YjsgJViewDefault = JFile::read($YjsgJViewDefaultRead);
$YjsgJViewDefault = str_replace('class ' . $isView, 'class Yjsg' . $isView . 'Default', $YjsgJViewDefault);
JFile::write($YjsgJViewDefaultFile, $YjsgJViewDefault);
}
require_once($YjsgJViewDefaultFile);
jimport('joomla.application.component.view');
JLoader::register($isView, YJSGEXTEND . $IsJversion . '/component/view.php', true);
Для пользователей Joomla 3 - проверьте их. Это поможет вам.
Переопределить классы MVC в Joomla 3
Плагин - https://github.com/ghazal/plg_mvcoverride
http://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core