Movable Type/第10回MTプラグイン勉強会 - MT-Appのリファレンスを精読する http://www.ark-web.jp/sandbox/wiki/953.html
Movable Type/第10回MTプラグイン勉強会 - MT-Appのリファレンスを精読する
第10回はMTのプラグイン、特に管理画面を拡張するようなプラグイン作成時に関連の深いMT::Appクラスのリファレンスを精読し、重要なAPIについて確認していきたいと思います。
動画(Ustream) †
勉強会の模様をアップしました。
Ustreamのチャンネルはこちら。
http://www.ustream.tv/channel/mt%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8B%89%E5%BC%B7%E4%BC%9A
ご感想・ご質問など †
ご感想、ご質問などあればお気軽にどうぞ。頂けるととても励みになります。
ネタ †
日時 †
- 2008/07/25(金) 10:30〜11:00
MT::App †
DESCRIPTION †
日本語リファレンスより引用。
MT::Appは、Movable TypeのWebアプリケーションの基本クラスです。標準的なCGIとして動作するアプリケーションや、Apache::Registryを使って動作するアプリケーション、mod_perlハンドラーとして動作するアプリケーションに対応します。MT::Appは、直接使用するためのものではなく、 Movable Typeフレームワークを使った他のアプリケーション(たとえばMT::App::CMS)の基本クラスとなるためのものです。
直接利用するのではなく、Movable Typeフレームワークを利用する他のアプリケーションの基礎クラスとして利用される。以下の例のように。
package MT::App::Foo; use MT::App; @MT::App::Foo::ISA = qw( MT::App ); package main; my $app = MT::App::Foo->new; $app->run;
継承関係 †
MT::AppクラスはMTクラスを継承している。そのため、MT::AppではMTクラスで実装されているコールバックの仕組みを利用できる。
CALLBACKS †
MT::App(実際はMT)は3つのコールバックの実行タイミングを提供します。
- テンプレートエンジンが指定したテンプレートファイルを読み込んだタイミング
- テンプレートエンジンがMT::App->build_pageメソッドでページを構築「しようとする
」タイミング - テンプレートエンジンがMT::App->build_pageメソッドでページを構築「した」タイミング
コールバックの登録は次のようになります。
MT->add_callback($meth, $priority, $plugin, $code); $meth: コールバックのフック先(タイミングと対象アプリケーション、テンプレートファイル指定。後述) $priority: 1〜10の間でコールバック実行の優先順位を指定。数値が小さい順から優先されて実行される。extraで0と11も使える。0は必ず最初に、11は必ず最後に実行させる。ただし、他とバッティングするとエラーになる。 $plugin: オプション。コールバックに紐付けられたMT::Pluginオブジェクト。意味がよくわらかない^^; $code: コールバックハンドラのコードリファレンス
この仕組みは管理画面のUIをカスタマイズするtransformerプラグインの作成でも利用されます。MT4.xプラグイン作成/transformerプラグインもご参考ください。
1の例 †
<package>::template_source <package>::template_source.<filename> ※ <package>はアプリケーションを実行するフルパッケージ名(たとえばMT::App::CMS) MT::App::CMSがmenu.tmplを読み込むタイミングの指定は MT::App::CMS::template_source.menu ワイルドカードを利用して、パッケージ(アプリケーション)を問わず全てのテンプレートファイルを読み込むタイミングを指定することもできる *::template_source
このタイミングでコールバックハンドラに渡されるパラメータは次の通り。
callback($eh, $app, \$tmpl) $eh: MT::Callback(コールバックハンドラー) $app: アプリケーションオブジェクト(上述の<package>のオブジェクト) \$tmpl: テンプレートファイルの内容(文字列)へのリファレンス
2の例 †
<package>::template_param <package>::template_param.<filename>
このタイミングでコールバックハンドラに渡されるパラメータは次の通り。
callback($eh, $app, \%param, $tmpl) $eh: MT::Callback(コールバックハンドラー) $app: アプリケーションオブジェクト(上述の<package>のオブジェクト) \%param: MT::App->build_pageメソッドに渡される%paramパラメータのハッシュリファレンス $tmpl: MT::Templateオブジェクト
このタイミングで実行するコールバック関数は主にテンプレートエンジンによって出力が作成される前に$param_refに変更を加える目的で利用します。
3の例 †
package>::template_output
package>::template_output.<filename>
このタイミングでコールバックハンドラに渡されるパラメータは次の通り。
callback($eh, $app, \$tmpl_str, \%param, $tmpl) $eh: MT::Callback(コールバックハンドラー) $app: アプリケーションオブジェクト(上述の<package>のオブジェクト) \$tmpl_str: MT::App->build_pageメソッドで作成された出力(結果文字列)へのリファレンス \%param: MT::App->build_pageメソッドに渡された%paramパラメータのハッシュリファレンス $tmpl: MT::Templateオブジェクト
このタイミングで実行するコールバック関数は主にテンプレートエンジンによって出力が作成された後にその結果文字列に変更を加える目的で利用します。
METHODS †
以下、リファレンスを眺めつつ、主要なものだけ時間をとって解説。
add_return_arg、call_return、return_uri、make_return_args、return_args、return_uri、uri_params †
session、start_session、make_session †
current_magic、make_magic_token、validate_magic †
post_run、pre_run †
log、trace †
デバッグに使える。logは[システムメニュー]->[ツール]->[ログ]でみれる。
traceはmt-config.cgiに
DebugMode 1
と指定すると、画面上にメッセージが表示される。
次回予定 †
次回はMT::Appのリファレンス読みの続きと(時間があれば)MT::App::CMS、MT::Pluginのリファレンスを読むことを予定しています。
tag: Movable Type、MT、MT、MTPlugin、勉強会