movabletype.jp
検索

グローバル・モディファイアを使いこなそう

グローバル・モディファイアとは

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>の使い方については、以下の記事を参照ください。

いろいろなグローバル・モディファイアと開発方法

今回ご紹介した以外にも、さまざまなグローバル・モディファイアが存在します。詳しくは、以下のドキュメントをご覧ください。

また、プラグイン開発を行うことで、新しいグローバル・モディファイアを追加することもできます。グローバル・モディファイアの開発方法については、以下のドキュメントをご覧ください。

シェアする

トラックバック