Estuve en este durante mucho tiempo y le prometí a Don que una vez que termine, daré más detalles al respecto.
Necesitaba anular Joomla MVC para los componentes y decirle a Joomla que busque anulaciones en mi carpeta html del complemento también, no solo dentro de la carpeta html de la plantilla.
Lo que nunca me gustó es cuando los desarrolladores realmente toman la clase predeterminada de Joomla y se meten con ella, así que prefiero extender esa clase si puedo, en lugar de frenar algo.
Mi proceso hace lo siguiente.
- Obtener la clase que necesito anular
- Léalo, reemplace el nombre de la clase, cree un nuevo archivo en mi carpeta de clase temporal
- Cargue mi versión de la clase
- Cargar clase Joomla
- Registre mi método de extensión que extiende la función loadTemplate para buscar anulación en mi complemento, que la plantilla de joomla y el último componente de joomla
Aquí está la imagen más bien
http://prntscr.com/3d9syq
Las primeras partes en el fragmento a continuación están verificando dónde está el usuario, si está a punto de actualizar Joomla, estoy eliminando los archivos de clase temporal que se crearon para asegurarme de que obtengamos nuevos cuando se complete la actualización, que se ocupa del número de 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);