サイトマップ

DokuWikiプラグイン開発tips:プラグインの独自のイベントを使う

DokuWikiのイベントリスト1)を眺めていて、AJAX_CALL_UNKNOWNというのが最初の方に出てきて気になりました。そんなものが何のためにあるのか、と。

調べてみると、DokuWiki本体が持っているlib/exe/ajax.phpというajaxをハンドリングするプログラムが発行しているイベントで、callパラメータで呼ばれる機能のうちDokuWiki自体が定義しているもの以外が指定された場合に起こります。つまり、このイベントを捕捉すれば、プラグイン独自のajax呼び出しを受け付けることができるというわけです。

プラグインのディレクトリ下にexe/ajax.phpなどを作成してそれを呼び出す方法もありますが、こちらの方がずっとスマートです。そして、最低限必要な認証などのチェック以外には何もしないので、規定されたcallパラメータ以外に何を使っても、何を出力しても構いません。これは積極的に使いたいものです。

少々脱線しましたが、これと同じようなことをプラグイン側で独自に定義したイベントで処理できないだろうかと考えました。やってみたら実に簡単で、イベントを発行する側は

    $data = array(1, 2, 3);
    trigger_event('HOGEHOGE_DATA_UNKNOWN', $data);

とします。呼び出し側はパラメータを配列変数に入れて呼び出すこと。これは、戻り値をパラメータで返すことを考慮しているため、直接array()をtrigger_event()のパラメータに指定してしまうと、エラーとなってしまうためです。

一方このイベントを受けて処理する側は、actionプラグインで

    function register(&$controller) {
        $controller->register_hook('HOGEHOGE_DATA_UNKNOWN',
                                   'BEFORE', $this, 'hogehoge_action');
    }

    function hogehoge_action($event) {
        print implode(',', $event->data);
    }        

などと処理してやればよいのです。処理側は送られたパラメータは$event→dataで受けることができます。AJAX_CALL_UNKNOWNの場合はこれはcallの値のみとなっていて、他のリクエストパラメータは受け取り側が自分で勝手に処理するようになっています。

関連コンテンツ

  • portletプラグイン .. AJAX_CALL_UNKNOWNを使ってajax呼び出しを処理しています。
  • mboardプラグイン .. AJAX_CALL_UNKNOWNを使ってajax呼び出しを処理しています。
  • datasourceプラグイン .. DATASOURCE_SCHEMA_UNKNOWNというイベントを発行してAJAX_CALL_UNKNOWNと同様に更に他の拡張を呼び出せるようにしています。
  • messengerプラグイン .. LOGGER_LOG_WRITEというイベントを受け取って、他のプラグインのログ出力を受け付けるようにしています。
 
research/1308035864.txt · 最終更新: 2011/07/02 08:34 by Kazuyuki Matsuda
特に明示されていない限り、本サイトの内容は次のライセンスに従います:Copyright(C) 2011 Shorindo, Inc. All Rights Reserved
Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki