Byłem na tym bardzo długo i obiecałem Donowi, że kiedy skończę, poda więcej szczegółów na ten temat.
Musiałem przesłonić Joomla MVC dla komponentów i powiedzieć Joomla, aby szukał zastąpień również w folderze HTML wtyczki, nie tylko w folderze HTML szablonu.
Nigdy nie podobało mi się, gdy programiści faktycznie wybrali domyślną klasę Joomla i zepsuli ją, więc raczej jeśli to możliwe, rozszerzam tę klasę, zamiast coś hamować.
Mój proces wykonuje następujące czynności.
- Zdobądź klasę, którą muszę zastąpić
- Przeczytaj, zamień nazwę klasy, utwórz nowy plik w moim folderze klasy tymczasowej
- Załaduj moją wersję klasy
- Załaduj klasę Joomla
- Zarejestruj moją metodę rozszerzania, która rozszerza funkcję loadTemplate, aby wyszukać zastąpienie w mojej wtyczce, niż szablon Joomla i ostatni składnik Joomla
oto obraz raczej
http://prntscr.com/3d9syq
Pierwsze części poniższego fragmentu to sprawdzenie, gdzie jest użytkownik. Jeśli ma zamiar zaktualizować Joomla, usuwam pliki klasy tymczasowej, które zostały utworzone, aby upewnić się, że otrzymamy nowe po zakończeniu aktualizacji, a nie o numer 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);