Eu estive nessa por muito tempo e prometi a Don que, uma vez terminado, darei mais detalhes sobre isso.
Eu precisava substituir o Joomla MVC por componentes e dizer ao Joomla para procurar substituições na minha pasta html do plugin também, não apenas dentro da pasta html do modelo.
O que eu nunca gostei é quando os desenvolvedores realmente pegam a classe padrão do Joomla e mexem com ela, então prefiro estender essa classe, se puder, em vez de frear alguma coisa.
Meu processo segue.
- Obter a classe que preciso substituir
- Leia, substitua o nome da classe, crie um novo arquivo na minha pasta de classe temporária
- Carregar minha versão da classe
- Carregar classe Joomla
- Registrar meu método de extensão que estende a função loadTemplate para procurar substituição no meu plugin, do que o modelo joomla e o último componente joomla
aqui está a imagem em vez
http://prntscr.com/3d9syq
As primeiras partes do snippet abaixo estão verificando onde o usuário está, se ele está prestes a atualizar o Joomla. Estou excluindo os arquivos de classe temporária criados para garantir que recebamos novos quando a atualização for concluída, que cuida do número 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);