より多くの機能を取得したり、一部のコア機能を別の方法で動作させるために、コアクラスをオーバーライドする必要がある場合があります。コアクラスをオーバーライドする方法はありますか?可能であれば、それらをオーバーライドすることでどのような問題に直面しますか?
より多くの機能を取得したり、一部のコア機能を別の方法で動作させるために、コアクラスをオーバーライドする必要がある場合があります。コアクラスをオーバーライドする方法はありますか?可能であれば、それらをオーバーライドすることでどのような問題に直面しますか?
回答:
少し前にコアクラスをオーバーライドできるプラグインを作成しましたが、@ jackJoeが答えで指摘した問題の犠牲になります。ただし、これにより、上書きをきれいに行うことができます。
components/com_content/models/articles.php
。
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);