コアクラスをオーバーライドして、より多くの機能を取得したり、いくつかのコア機能を別の方法で機能させる必要がある場合があります。コアクラスをオーバーライドする方法はありますか?可能であれば、それらを上書きすることでどのような問題に直面する可能性がありますか?
コアクラスをオーバーライドできるプラグインを少し前に作成しましたが、@ jackJoeが彼の回答で指摘した問題の犠牲になります。ただし、これにより、オーバーライドをきれいに行うことができます。
Joomla 3ユーザーの場合-これらを確認してください。それはあなたを助けます。
プラグイン- https://github.com/ghazal/plg_mvcoverride
http://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core
私は非常に長い間これに携わっていましたが、ドンは私が終わったらそれについてさらに詳しく説明することを約束しました。
コンポーネントのJoomla MVCをオーバーライドし、テンプレートhtmlフォルダー内だけでなく、プラグインhtmlフォルダーでもオーバーライドを探すようにJoomlaに指示する必要がありました。
開発者が実際にJoomlaのデフォルトクラスを使用してそれをいじくるとき、私が気に入らなかったことは、何かを停止するのではなく、可能であればそのクラスを拡張することです。
私のプロセスは以下の通りです。
これはむしろ画像です http://prntscr.com/3d9syq
以下のスニペットの最初の部分は、ユーザーがどこにいるかをチェックしています。Joomlaを更新しようとしている場合は、更新が完了したときに作成された一時クラスファイルを削除して、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);