Saya sudah membahas hal ini untuk waktu yang sangat lama dan berjanji kepada Don bahwa setelah saya selesai akan memberikan rincian lebih lanjut tentang hal itu.
Saya perlu mengganti komponen Joomla MVC dan memberitahu Joomla untuk mencari pengganti dalam folder html plugin saya juga, tidak hanya di dalam folder template html.
Apa yang tidak pernah saya sukai adalah ketika para pengembang benar-benar mengambil kelas default Joomla dan mengacaukannya, jadi saya lebih suka memperpanjang kelas itu jika saya bisa, alih-alih mengerem sesuatu.
Proses saya memang mengikuti.
- Dapatkan kelas yang harus saya timpa
- Baca, ganti nama kelas, buat file baru di folder kelas temp saya
- Muat versi kelas saya
- Muat kelas Joomla
- Daftarkan metode extended saya yang memperluas fungsi loadTemplate untuk mencari override di plugin saya, daripada template joomla dan komponen joomla terakhir
di sini adalah gambarnya bukan
http://prntscr.com/3d9syq
Bagian pertama dalam cuplikan di bawah ini adalah memeriksa di mana pengguna berada, jika ia akan memperbarui Joomla saya menghapus file kelas temp yang dibuat untuk memastikan bahwa kami mendapatkan yang baru ketika pembaruan selesai yang daripada menangani nomor 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);