第3回はフィルタについての説明です。
フィルタ(filter)とは、入力されたデータを篩(ふるい)に掛けて選別を行い、
所望の出力データを得るための処理です。これまで説明した
変数タグ、
コンテナタグ、
条件タグと、
今回説明するフィルタを以って、
MT の標準
プラグインで拡張できる範囲は、あらかた網羅できたことになります。
目次
一度では全て書き切れないので、幾つかの連載記事とする予定です。
MovableType のヘルプドキュメント
にある内容を網羅し、これに沿った形で書いていくつもりですので、併せて読み進めていただけるとモア・ベターかと思います。
よろしくお付き合いくださいませm(_ _)m
グローバルフィルタ
グローバルフィルタ(global filter)とは、
encode_html や
upper_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) = @_;
-
入力された生のデータ。これに対してフィルタ処理を行います。
この辺りはグローバルフィルタと同じです。
この記事で使用した
プラグインのプログラムコードを
ダウンロードできます。