技術情報提供ブログ
フィルター プラグインの開発
シックス・アパートの柳下(やぎした)です。今まで変数タグの開発方法や、ローカライズ技術について、ご紹介してきました。第4回目の今回は、視点を変えてフィルター プラグインの開発についてお話したいと思います。入力されたテキスト情報に対して、スペル・チェックやリンクの付加といった操作を行うグローバル・タグ・アトリビュートや、Markdownプラグインのように、テキスト・フォーマットをHTML変換するプラグインを開発することができます。
リンクを付加するフィルター(link_mtフィルター)の開発
特定の文字列にアンカーリンクを付加するグローバル・フィルターを開発してみましょう。サンプルプラグインを例に解説します。グローバル・フィルターの登録は、変数タグの登録とは次の点が異なります。
MT::Template::Context->add_global_filter(link_mt => \&link_mt);
変数タグの登録の場合、add_tag関数を使って登録しましたが、フィルターの場合は、add_global_filterメソッドを使います。
では、フィルターの処理をみてみましょう。

- 2行目
フィルター処理の対象のテキストを取得します。add_global_filterで登録したメソッドには、次の引数がわたされます。
引数(add_globarl_filter) No. 引数名 解説 1 $text フィルターを適用する文字列 2 $arg 属性の値(link_mt="1"の場合"1"となります) 3 $ctx MT::Template::Contextオブジェクト - 4行目
属性の指定を確認するため、属性値をチェックします。link_mt="1"と指定していない場合は、フィルターを適用させないようにします。
- 5行目
正規表現を使って、フィルター処理を行います。
- 7行目
リンクを付加したテキストを戻します。
フィルターの動作を、エントリー・アーカイブで確認します。テンプレート内の<MTEntryBody>タグの位置に、次のようにフィルターを設定します。
<$MTEntryBody link_mt="1"$>
エントリーを投稿し、フィルターの動作を確認します。エントリー・アーカイブではリンクが付加されていることが確認できます。

このようにフィルター プラグインは、ウェブ・ページを出力する際に適用されることがわかります。
付加するリンクを指定可能にする(add_linkフィルター)
link_mtフィルターは、リンクならびにリンクを付加する対象が固定でした。ユニークに設定ができるように、次のカスタマイズをおこないます。
- プラグインで利用する変数(リンクを付加する文字列、リンク情報)を登録する画面
- 変数をデータベースに保存
- 変数をデータベースから取得
変数の登録画面
プラグインの変数は、ハッシュとして保存されるため、識別するキーと値を指定します。また、プラグインの設定をおこなったメニューによって、次のレベルで管理されます。たとえば、システム・メニューで、変数を指定した場合は、システム全体で有効な変数となります。
- システム全体の変数
- ブログ固有の変数
最初に、テンプレート・エンジンに対応した登録画面用テンプレートを作成します。

作成したテンプレートは、tmplディレクトリに保存します。

登録画面用テンプレートで入力した値(add_link_target, add_link_url)を、プラグインの変数として登録します(赤枠の部分)。また、サテンプレートも指定します(青線の部分)。system_config_templateでテンプレートを指定すると、システム・メニューでのみ登録できるようになります。また、config_templateでテンプレートを指定すると、ブログ単位で変数を登録できます。このサンプルでは、システム全体の変数として設定しましょう。

変数をデータベースに保存
プラグインの変数を保存する場合、プラグイン側で作業することはありません。これは、プラグインを登録した時点で、プラグインの管理フレームワークが処理するためです。また、変数を保存した後に、プラグインの設定画面を表示すると、保存した変数が表示されます。これも、管理フレームワークが処理しています。

変数をデータベースから取得
では、プラグイン・アプリケーション内で、登録した変数を利用してみましょう。プラグインの変数の取得は、get_config_valueメソッドを利用します。

| No. | 引数名 | 解説 |
|---|---|---|
| 1 | $key | 変数を取得するためのキー |
| 2 | $scope | 取得する変数について、システム全体もしくは特定のプログか範囲を指定します。システム全体の場合はsystemを、特定のブログの場合はblog:<blogID>と指定します。未指定の場合は、システム全体として判断します。 |
まとめ
今回は、テキスト情報に様々な操作を行うことができるフィルター・プラグインの開発について、以下の内容をご紹介しました。
- フィルター・プラグインの登録方法
- プラグイン変数の登録方法
- プラグイン変数の取得方法
また、今回のサンプルプラグインは、次のようにダウンロードできます。
これらのプラグインは、開発方法をご紹介するためのサンプルであり、正規表現による文字列のチェックは、最低限のものです。たとえば、対象の文字列にアンカーリンクが付加されている場合は、2重にリンクが付加されてしまいます。
次回は、テンプレート・タグの開発に戻り、コンテナ・タグの開発について解説します。
プラグイン開発ステップ・バイ・ステップ インデックス
- 第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

