Я был над этим очень долго и пообещал Дону, что, как только я закончу, я расскажу об этом подробнее.
Мне нужно было переопределить Joomla MVC для компонентов и попросить Joomla искать переопределения и в папке html моего плагина, а не только внутри папки html шаблона.
Что мне никогда не нравилось, так это то, что разработчики на самом деле беру класс Joomla по умолчанию и связываются с ним, так что я лучше расширю этот класс, если смогу, вместо того, чтобы что-то тормозить.
Мой процесс делает следующее.
- Получить класс, который мне нужно переопределить
- Прочитайте его, замените имя класса, создайте новый файл в моей папке временных классов
- Загрузить мою версию класса
- Загрузить класс Joomla
- Зарегистрируйте мой метод extends, который расширяет функцию loadTemplate для поиска переопределения в моем плагине, чем шаблон joomla и последний компонент joomla
вот изображение скорее
http://prntscr.com/3d9syq
Первая часть в фрагменте ниже проверяет, где находится пользователь, собирается ли он обновить Joomla. Я удаляю файлы временного класса, которые были созданы, чтобы быть уверенными, что мы получим свежие файлы, когда обновление завершится, а затем позаботится о числе 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);