web-dev-qa-db-ja.com

Joomla 3.6コアオーバーライド

私はクライアント用のカスタムコンポーネントを開発しましたが、ユーザーがメールアドレスを再利用できるようにする必要がありました。 Joomlaは一意のメールアドレスを必要としたため、「onAfterRoute」で起動して代わりにJTableUserクラスをロードするシステムプラグインを作成しました。

これは理想的ではありませんが、最終結果を達成するための最良の方法でした。

Joomla 3.6をインストールしたばかりで、から何かを使用しようとするとJTableUserクラスを再宣言できないという致命的なエラーが発生します。元のクラスがonAfterRouteトリガーの前に呼び出されていると思います。

class PlgSystemMyComponentOverride extends JPlugin
{
public function __construct(&$subject, $config = array()) {
      parent::__construct($subject, $config);
  }

  public function onAfterRoute() {
      $app = JFactory::getApplication();
      $option = JRequest::getCMD('option');
      if('com_users' == JRequest::getCMD('option')) {
          require_once('path_to_my_code.php');
      }
  }
}

Joomla 3.6でこれを修正する方法はありますか?

ありがとう

リー

3
Lee Wiggins

JTableUserは非常にトリッキーです。フレームワークの初期化時に初めてロードされるため、システムプラグインで簡単にオーバーロードすることはできず、メモリから削除することはできません。

この問題を解決するには、patch関数を作成する必要があり、元のJUserクラスがコアでシステムプラグインに置き換えられています。

$this->patch('JTableUser', '/libraries/joomla/table/user.php');
1
Anibal