MovableTypeプラグインの作り方 - 第3回:フィルタ

Posted by
ぴろり
Posted at
2006/03/31 14:28
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
MovableType カテゴリ
 第3回はフィルタについての説明です。 フィルタ(filter)とは、入力されたデータを篩(ふるい)に掛けて選別を行い、 所望の出力データを得るための処理です。これまで説明した 変数タグコンテナタグ条件タグと、 今回説明するフィルタを以って、 MT の標準で拡張できる範囲は、あらかた網羅できたことになります。
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する | Twitterにポストする

目次

 一度では全て書き切れないので、幾つかの連載記事とする予定です。 MovableType のヘルプドキュメント にある内容を網羅し、これに沿った形で書いていくつもりですので、併せて読み進めていただけるとモア・ベターかと思います。 よろしくお付き合いくださいませm(_ _)m

グローバルフィルタ

 グローバルフィルタ(global filter)とは、 encode_htmlupper_case のように変数タグで使用され、 その変数タグの出力結果に何らかの影響を与えるものです。 グローバルフィルタは、"グローバル"の名の通り、あらゆる変数タグに指定することができます (果たしてそれが意味あるものかは別にして)。
 次の例は、変数タグ中の特定の文字を置換します(sample_3_1.pl)

 このフィルタは次のように使用することができます。

sample_3_1.pl は UTF-8 で書かれています。 の文字コードに合わせて、を保存し直してください。

コードの詳細

MT::Template::Context->add_global_filter (HG => ¥&HG);
 HG という名前のグローバルフィルタを定義し、 その処理は HG に書かれている、ということ。
my ($data, $arg, $ctx) = @_;
 フィルタに入力された文字列、フィルタへの引数、現在のコンテクストを取得します。おまじない。
$data =‾ s/。/フゥーーー!! /g;
 入力された文字列中の読点"。"を全て"フゥーーー!!"に置き換えます。
$data;
 処理された結果を出力します。

グローバルフィルタの引数

 グローバルフィルタでも、その動作を変更できるよう引数を取ることができます。 $arg には、HG="..." で指定された値が代入されているので、 この値を使用してフィルタの動作を変化させることが可能です(sample_3_2.pl)

コードの詳細

my $star = '☆彡' x $arg;
 $arg で指定された回数だけ、 '☆彡'を繰り返し、これを $star に代入します。
$star. $data. $star;
 入力された文字列の前後に $star で囲んで出力します。

コンテナタグによる実現

 グローバルフィルタと同様の機能を、 コンテナタグとして無理矢理書き換えてみると、 次のようになるでしょう(sample_3_2a.pl)

 グローバルフィルタで済むところは、素直にグローバルフィルタを使っておくのが良いでしょう。

テキストフィルタ

 テキストフィルタは、MT のエントリ編集画面にある"改行設定"に新しい項目を追加することができます。 本来(?)は、 Wiki記法はてな記法 などで書かれた文書に、適切にフィルタ処理を施して所望のデータを得る、といった使途に使います。
 ここでは、入力されたテキストを逆毛語化する、 逆毛語フィルタを作ってみます(sample_3_3.pl)

sample_3_3.pl は UTF-8 で書かれています。 の文字コードに合わせて、を保存し直してください。

コードの詳細

MT->add_text_filter ('sakage'
 sakageという内部名でテキストフィルタを追加します。 グローバルフィルタfilter="..."で指定する場合に使用します。
label => '逆毛語'
 "改行設定"ドロップダウンリストに表示されるフィルタ名称です。
on_format => ¥&sakage
 フィルタが選択された時に、適用する処理は sakage に書かれている、と云うこと。
my ($data) = @_;
 入力された生のデータ。これに対してフィルタ処理を行います。 この辺りはグローバルフィルタと同じです。

サンプルファイルの

 この記事で使用したのプログラムコードを ダウンロードできます。

この記事を読んだ人はこんな記事も読んでいます 記事リコメンデーションについて

その他の関連する記事


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (匿名可/必須/公開)
 (匿名可/必須/非公開)
 (必須)
コメントスパム防止のため投稿前に ランダムな数字 CAPTCHAについて を入力してから投稿してください。お手数ですがご協力のほど宜しくお願いいたします。