私はクラスをオーバーライドしようとしていますJMenuSite in libraries/cms/menu/site.php
。プラグインシステムを作成しましたjmenusite.php
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
class plgSystemJmenusite extends JPlugin{
public function onAfterRoute () {
require_once(JPATH_SITE.'/plugins/system/jmenusite/site.php');
}
}
?>
ファイルをコピーしましたsite.php
プラグインのフォルダ内。
Joomlaは元のクラスを実行してからエラーを出します:
Fatal error: Cannot redeclare class JMenuSite
既存のクラスをオーバーライドするにはどうすればよいですか?
onAfterRouteイベントは、シナリオで機能するものではありません。このイベントがトリガーされる前にJMenuSiteクラスがロードされるため。
これを実現するには、onAfterInitialiseイベントを使用する必要があります。
重要な注意: Joomla 3.4では、コアコードにいくつかの変更があり、そのため言語フィルタープラグインが有効になっている場合、このクラスをオーバーライドすることはできません。 Joomlaは意図的にこのプラグインをロードして言語固有の処理を適用し、このプラグインはイベントがトリガーされる前にJMenuSiteクラスをロードします。