グローバル・モディファイアを使いこなす
Movable Type には「グローバル・モディファイア」という仕組みがあります。グローバル・モディファイアとは、MTタグと合わせて記述を行うことで、MTタグの出力結果を様々な形で加工・修正する仕組みのことです。
「モディファイア」という言葉が耳慣れない方もいると思いますが、これは英語の「modifier」から付けられています。「modifier」という言葉には「修正するもの、修飾語句」という意味があります。
今回は、使いこなすとMovable Type が便利になるグローバル・モディファイアをいくつかピックアップしてご紹介していきます。
文字列の置換を行える [replace]
[replace] は、MTタグの出力結果から、任意の文字列を別な文字列に置換するグローバル・モディファイアです。実際の使用例をご紹介しましょう。
サンプルシナリオ:
最新記事5件のタイトルを表示する際に、「Movable Type」という文字を「MT」という文字に変える
元のコード:
<ul>
<MTEntries limit="5">
<li><$MTEntryTitle$></li>
</MTEntries>
</ul>
元の出力結果例:
・MT チーム、沖縄に上陸します! ・Movable Type for AWS バージョン 6.0.4-0 がリリースされました ・Movable Type 6.0.4 の提供を開始します ・Movable Type のSEO対策を強化する ・HVM インスタンスに対応した Movable Type for AWS (HVM) をリリースしました
上記の出力結果を、[replace] モディファイアをつかって修正します。
修正後のコード:
<ul>
<MTEntries limit="5">
<li><$MTEntryTitle replace="Movable Type","MT"$></li>
</MTEntries>
</ul>
修正後の出力結果例:
・MT チーム、沖縄に上陸します!
・MT for AWS バージョン 6.0.4-0 がリリースされました
・MT 6.0.4 の提供を開始します
・MT のSEO対策を強化する
・HVM インスタンスに対応した MT for AWS (HVM) をリリースしました
このように、[replace] を使って、文字列を変換した結果が出力できました。
同じ文字列置換型のグローバル・モディファイアとして、[regex_replace] というモディファイアもあります。[regex_replace] を利用すると、正規表現を使った文字列の置換が可能です。
出力結果が空のときに指定値を出力する [_default]
[_default] は、MTタグの評価結果が空だった場合、[_default] で指定した値を出力するグローバル・モディファイアです。これも、例を見てみましょう。
サンプルシナリオ:
最新記事5件のタイトルを表示する。タイトルが存在しない記事には 「タイトル無し」 という文字を表示する
元のコード:
<ul>
<MTEntries limit="5">
<li><$MTEntryTitle$></li>
</MTEntries>
</ul>
元の出力結果例:
・MT チーム、沖縄に上陸します!
・
・Movable Type 6.0.4 の提供を開始します
・
・HVM インスタンスに対応した Movable Type for AWS (HVM) をリリースしました
修正したコード:
<ul>
<MTEntries limit="5">
<li><$<MTEntryTitle _default="タイトル無し"$></li>
</MTEntries>
</ul>
修正後の出力結果例:
・MT チーム、沖縄に上陸します!
・タイトル無し
・Movable Type 6.0.4 の提供を開始します
・タイトル無し
・HVM インスタンスに対応した Movable Type for AWS (HVM) をリリースしました
元の記事では空欄だった箇所に、「タイトル無し」の文字が出力されていることが分かります。
文字数を数える [count_characters]、htmlタグを除去する [remove_html]
[count_characters] は、そのMTタグの結果に含まれる文字数を計算するグローバルモディファイアです。引数に[1]を設定して使います。[remove_html] は、MTタグに含まれるhtmlタグを除去するモディファイアで、引数に[1]を設定して使います。
このモディファイアを使い、少し複雑なロジックを作ってみましょう。
サンプルシナリオ:
記事の本文、続きに含まれる文字数から、htmlタグを含まない「文字数」を計算して、変数「total_count」に代入する。
変数「total_count」の値を調べ、300文字未満の場合は「この記事を読むのにかかる時間 1分以内」、300文字以上の場合は「1分以上」と表示を行う。
以下が実際のコードになります。
<MTSetVars>
body_count=<$MTEntryBody remove_html="1" count_characters="1"$>
more_count=<$MTEntryMore remove_html="1" count_characters="1"$>
</MTSetVars>
<MTSetVar name="total_count" value="$body_count">
<MTSetVar name="total_count" value="$more_count" op="+">
<MTVar name="total_count">
<MTIf name="$total_count" lt="300">
この記事を読むのにかかる時間:1分以内
<MTElse>
この記事を読むのにかかる時間:1分以上
</MTIf>
まず、記事の [本文] から、htmlタグを除去した純粋な文字数を変数 [body_count] に、同じく [続き] から、htmlタグを除去した純粋な文字数を変数 [more_count] に代入します。
その後、変数 [total_count] に、[body_count]、[more_count] の順番に数値を加算していきます。
最後に、[total_count] の文字数の値で条件分岐します。300文字未満の場合は「この記事を読むのにかかる時間:1分以内」、300文字以上の場合は「この記事を読むのにかかる時間:1分以上」と表示を行います。
「body_count」,「more_count」の値は、ブロックタグ <MTSetrVars> でまとめて指定しています。<MTSetVars>の使い方については、以下の記事を参照ください。
いろいろなグローバル・モディファイアと開発方法
今回ご紹介した以外にも、さまざまなグローバル・モディファイアが存在します。詳しくは、以下のドキュメントをご覧ください。
また、プラグイン開発を行うことで、新しいグローバル・モディファイアを追加することもできます。グローバル・モディファイアの開発方法については、以下のドキュメントをご覧ください。