Я був на цьому дуже довго і пообіцяв Дону, що як тільки я закінчу, дам більше деталей про це.
Мені потрібно було замінити 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);