Ich war sehr lange dabei und habe Don versprochen, dass ich, sobald ich fertig bin, weitere Details dazu geben werde.
Ich musste Joomla MVC für Komponenten überschreiben und Joomla anweisen, auch in meinem HTML-Plug-In-Ordner nach Überschreibungen zu suchen, nicht nur innerhalb des HTML-Vorlagenordners.
Was ich nie gemocht habe, ist, wenn Entwickler tatsächlich die Joomla-Standardklasse nehmen und damit herumspielen, also erweitere ich diese Klasse lieber, wenn ich kann, anstatt etwas zu bremsen.
Mein Prozess folgt.
- Holen Sie sich die Klasse, die ich überschreiben muss
- Lesen Sie es, ersetzen Sie den Klassennamen, erstellen Sie eine neue Datei in meinem temporären Klassenordner
- Laden Sie meine Version der Klasse
- Laden Sie die Joomla-Klasse
- Registrieren Sie meine Erweiterungsmethode, die die Funktion loadTemplate erweitert, um nach Überschreibungen in meinem Plugin zu suchen, als Joomla-Vorlage und letzte Joomla-Komponente
Hier ist das Bild eher
http://prntscr.com/3d9syq
Der erste Teil des Snippets unten überprüft, wo sich der Benutzer befindet, wenn er Joomla aktualisieren möchte. Ich lösche die temporären Klassendateien, die erstellt wurden, um sicherzustellen, dass wir nach Abschluss des Updates neue Dateien erhalten, die sich dann um die JackJoe-Nummer kümmern 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);