技術情報提供ブログ

フィルター プラグインの開発

シックス・アパートの柳下(やぎした)です。今まで変数タグの開発方法や、ローカライズ技術について、ご紹介してきました。第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$ctxMT::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メソッドを利用します。

引数(get_config_value)
No.引数名解説
1$key変数を取得するためのキー
2$scope取得する変数について、システム全体もしくは特定のプログか範囲を指定します。システム全体の場合はsystemを、特定のブログの場合はblog:<blogID>と指定します。未指定の場合は、システム全体として判断します。

まとめ

今回は、テキスト情報に様々な操作を行うことができるフィルター・プラグインの開発について、以下の内容をご紹介しました。

  • フィルター・プラグインの登録方法
  • プラグイン変数の登録方法
  • プラグイン変数の取得方法

また、今回のサンプルプラグインは、次のようにダウンロードできます。

これらのプラグインは、開発方法をご紹介するためのサンプルであり、正規表現による文字列のチェックは、最低限のものです。たとえば、対象の文字列にアンカーリンクが付加されている場合は、2重にリンクが付加されてしまいます。

次回は、テンプレート・タグの開発に戻り、コンテナ・タグの開発について解説します。

プラグイン開発ステップ・バイ・ステップ インデックス

  • 投稿者 yagishita
  • カテゴリー Plugin

トラックバック

トラックバック URL

このページのトップへ