技術情報提供ブログ
Transformerプラグインの開発
シックス・アパートの柳下(やぎした)です。第7回目の今回は、Movable Typeの管理画面の機能を拡張するTransformerプラグインの開発についてお話したいと思います。Movable Typeの管理画面の機能を拡張する方法には、次の2つの方法があります。
- テンプレート・エンジンの処理と連携して管理画面の表示を変更するTransformerプラグイン
- エントリーの一覧等を表示した際に一緒に表示されるプラグインアクション・メニュー
昔、トランスフォーマーという変形ロボットのアニメーションがありましたが、Transfomerプラグインは、MT::Appのコールバックとして、テンプレート・エンジンと連携し、管理画面の表示内容を変更します。
テンプレート・ファイルの内容を変更するAppTemplateSource
第3回目でも解説したように、Movable Typeの管理画面は、表示する内容を定義した「テンプレート・ファイル」をテンプレート・エンジンが解析、処理して表示されます。AppTemplateSourceは、テンプレート・エンジンが指定したテンプレート・ファイルを読み込んだ際に、その読み込んだ内容を変更します。
テンプレート・ファイルの内容を変更するには、次のようなコールバックを用意します。
MT->add_callback('MT::App::CMS::AppTemplateSource.blog_left_nav', $priority, $plugin, ¥$code);
| No. | 引数名 | 解説 |
|---|---|---|
| 1 | $meth | コールバック・メソッドの名前 |
| 2 | $priority | 実行される優先順位を1から10の範囲の数値で指定 |
| 3 | $pluguin | ハンドラーと関連づけられたMT::Pluginオブジェクトへのリファレンス |
| 4 | $code | コールバックの処理を行うために呼び出すコードへのリファレンス |
blog-left-navは、ブログ・ツールバーを表示するテンプレート・ファイルです。AppTemplateSourceについては、MT::Appを参照してください。
表示パラメーターの内容を変更するAppTemplateParam
AppTemplateParamは、テンプレート・エンジンが処理する、表示パラメーターの内容を変更します。
表示パラメーターの内容を変更するには、次のようなコールバックを用意します。
MT->add_callback('MT::App::CMS::AppTemplateParam.bm_entry', $priority, $plugin, ¥$code);
bm_entryは、クイック投稿画面を表示するテンプレート・ファイルです。AppTemplateParamについては、MT::Appを参照してください。
テンプレート・エンジンが処理した結果を変更するAppTemplateOutput
AppTemplateOutputは、テンプレート・エンジンが処理した結果を、変更します。
テンプレート・エンジンが処理した結果を変更するには、次のようにコールバックを用意します。
MT->add_callback('MT::App::CMS::AppTemplateOutput.bm_entry', $priority, $plugin, ¥$code);
bm_entryは、クイック投稿画面を表示するテンプレート・ファイルです。AppTemplateOutput.bm_entryとAppTempalteParam.bm_entryの違いは、テンプレート・エンジンが処理したか否かです。AppTemplateOutputについては、MT::Appを参照してください。
Transformerプラグイン: SitePathProtectの開発
通常、ブログの設定の権限があるユーザーは、ブログの設定画面で、サイト・パスやサイトURLを修正できます。今回は、システム管理者もしくはブログ管理者の権限がないユーザーが、サイト・パスやサイトURLを修正できないように編集画面を保護するプラグインを作ってみましょう。
Movable Typeのテンプレート・エンジンは、HTML::TemplatePerlモジュールをベースにしており、変数の入力や条件分岐、ループ処理等をタグで指定できます。これらのタグの詳細は、HTML::Templateのマニュアル(英文)(日本語訳)を参照してください。
システム管理者ならびにブログ管理者の権限は、次のようにテンプレート・エンジンにわたす変数・パラメーターとして定義しています。AppTemplateSourceを使う場合、これらの変数を使った条件分岐のロジックを、テンプレート・ファイルの該当箇所に適用することで変更できます。
- システム管理者権限: IS_ADMINISTATOR
- ブログ管理者権限: CAN_EDIT_AUTHORS
システム管理者は、ブログ管理者権限をあわせもっていますので、ブログ管理者権限の有無をチェックするようにします。次のソースを例に、テンプレート・ファイルの内容を変更するロジックを解説します。ソースはダウンロードいただけます。
- 2行目
引数を取得します。
引数(AppTemplateSource) No. 引数名 解説 1 $eh コールバック・ハンドラー 2 $app MT::Appオブジェクト 3 $tmpl_ref テンプレートの内容へのリファレンス - 4-7行目
ヒアドキュメントで、変更する対象を指定します。
- 8-17行目
ヒアドキュメントで、変更する内容を指定します。前述のパラメーターを使って条件分岐を定義します。
- 19行目
quotemeta関数で、変更する対象を正規表現するためのエスケープ処理をします。
- 20行目
正規表現を使って変更した内容を、設定します。
AppTemplateParamへのハンドラーを作る場合の引数は、次のとおりです。
| No. | 引数名 | 解説 |
|---|---|---|
| 1 | $eh | コールバック・ハンドラー |
| 2 | $app | MT::Appオブジェクト |
| 3 | $param_ref | テンプレート・エンジンにわたすパラメーターへのハッシュ・リファレンス |
| 4 | $tmpl_ref | テンプレートの内容へのリファレンス |
AppTemplateOutputへのハンドラーを作る場合の引数は、次のとおりです。
| No. | 引数名 | 解説 |
|---|---|---|
| 1 | $eh | コールバック・ハンドラー |
| 2 | $app | MT::Appオブジェクト |
| 3 | $tmpl_str | MT::App->build_pageメソッドで作成されたページに対応する文字列へのリファレンス |
| 4 | $param_ref | テンプレート・エンジンにわたすパラメーターへのハッシュ・リファレンス |
| 5 | $tmpl | ページの作成に利用したHTML::Templateオブジェクト |
まとめ
このように、正規表現を使って変更を適用するだけのシンプルな方法で、管理画面の表示をカスタマイズできます。AppTemplateSource、AppTemplateParam、AppTemplateOutputのどれを利用するかは、アプリケーションのメンテナンス性や作りやすさ等を考慮して選択してください。SitePathProtectプラグインも、AppTemplateOutputを利用することで、よりシンプルになります。
今回は、管理画面の表示をカスタマイズするTransformerプラグインの開発についてご紹介しました。今回のサンプルプラグインは、次のようにダウンロードできます。
これからプラグインを開発する方を対象とした「プラグイン開発ステップ・バイ・ステップ」ですが、今回をもってスタートアップ編を終了します。今までありがとうございました。今後は、みなさまのフィードバックをもとに、スパム・フィルターやPHPによるプラグインの開発などの、応用編を検討しています。ぜひとも、みなさまのフィードバックをお願いします。
プラグイン開発ステップ・バイ・ステップ インデックス
- 第1回 プラグイン開発のためのファーストステップ (2006.07.25公開)
- 第2回 テンプレート・タグ(変数タグ) プラグインの開発 (2006.08.04公開)
- 第3回 ローカライズ技術の解説 (2006.08.18公開)
- 第4回 フィルター プラグインの開発 (2006.09.01公開)
- 第5回 テンプレート・タグ(コンテナ・タグ) プラグインの開発 (2006.10.05公開)
- 第6回 テンプレート・タグ(条件タグ) プラグインの開発 (2006.10.05公開)
- 第7回 Transformerプラグインの開発 (2006.10.12公開)
- 投稿者 yagishita
- カテゴリー Plugin
トラックバック
トラックバック URL
- »MovableType3.3と4.0の両方に対応したTransformerプラグインの書き方。 from Junnama Online (Mirror)
-
各所で話題の? Transformerプラグインが4.0で動作しない! 件 (...

