web-dev-qa-db-ja.com

クラスJMenuSiteをオーバーライドするJoomla 3プラグイン

私はクラスをオーバーライドしようとしています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

既存のクラスをオーバーライドするにはどうすればよいですか?

1
user2802368

onAfterRouteイベントは、シナリオで機能するものではありません。このイベントがトリガーされる前にJMenuSiteクラスがロードされるため。

これを実現するには、onAfterInitialiseイベントを使用する必要があります。

重要な注意: Joomla 3.4では、コアコードにいくつかの変更があり、そのため言語フィルタープラグインが有効になっている場合、このクラスをオーバーライドすることはできません。 Joomlaは意図的にこのプラグインをロードして言語固有の処理を適用し、このプラグインはイベントがトリガーされる前にJMenuSiteクラスをロードします。

1
Nick