mtde.info

Movable Type Developers Express

このカテゴリでは、おもにMovable Type 4 で追加されたグローバル・モデファイアの取り扱いに関するサンプルを紹介します。

『グローバル・モデファイア関連サンプル』カテゴリ内のエントリ一覧

setvarモデファイア(変数代入)

2008年2月17日 12:03 | Writer: apstar | 記事本文

テンプレートタグでの出力結果を変数へ代入するには、MTSetVarBlockテンプレートタグを用います。これに加え、Movable Type 4.1からは、出力を行うテンプレートタグへsetvarモデファイアを指定すれば、同じようなことができるようになりました。

「最新のエントリのタイトルを5件、リスト形式で変数へ代入する」というコードを、「MTSetVarBlockを用いた場合のサンプル」と「setvarモデファイアを指定した場合のサンプル」の二通りで説明します。

MTSetVarBlockでのサンプルコード

コード

<p>SetVarBlockでのコード</p>
<MTSetVarBlock name="last5">
<ul>
<MTEntries lastn="5">
    <li><MTEntryTitle></li>
</MTEntries>
</ul>
</MTSetVarBlock>
<MTGetVar name="last5">

実行結果

SetVarBlockでのコード

setvarモデファイアでのサンプルコード

コード

<p>setvarモデファイアでのコード</p>
<MTEntries lastn="5" setvar="last5">
    <li><MTEntryTitle></li>
</MTEntries>
<ul>
<MTGetVar name="last5">
</ul>

実行結果

setvarモデファイアでのコード

挙動の相違点

MTSetVarBlockを用いた例では、上記サンプルのようにul、liタグを含めることができます。

対してsetvarモデファイアを用いた例では、MTEntriesブロックタグへ変数名を指定しています。つまりこのブロック内で実行したテンプレートタグの出力結果が変数へ代入されます。付加したliタグも一緒に格納されます。変数 last5の値をMTGetVarで値を取り出すときに、ulタグのみ変数の上下へ書き加える形となります。

ファンクションタグへsetvarモデファイアを指定してみると...

コード

<p>setvarモデファイア(2)</p>
<MTSetVar name="Inc" value="0">
<MTEntries lastn="5" setvar="last5">
<MTSetVar name="Inc" op="++">
<MTIf name="Inc" eq="3">
    <MTEntryTitle setvar="three">
<MTElse>
    <li><MTEntryTitle></li>
</MTIf>
</MTEntries>

<ul>
   <MTGetVar name="last5">
</ul>

<ul>
   <li><MTGetVar name="three"></li>
</ul>

実行結果

setvarモデファイア(2)

setvarモデファイア注意点

setvarモデファイアは、ファンクションタグにも指定できます。このサンプルコードでは、3番目のエントリタイトルのみ「three」という変数へ代入し、それ以外のエントリタイトルを「last5」という変数へ代入しています。

上記サンプルのように「親ブロックのMTEntriesブロックタグへsetvarモデファイアを指定→ブロック内のMTEntryTitleにもsetvarモデファイアを指定」というように入れ子で使用すると、上記の例では3番目のリストが抜け落ちてしまいます。

これはsetvarモデファイアを指定したテンプレートタグは、実行結果を出力せず、指定した変数へ値の代入を行うだけの挙動に変化するためです。

意図しない出力結果とならないよう、注意が必要です。

wrap_textモデファイア(N文字で改行)

2008年2月17日 14:13 | Writer: apstar | 記事本文

wrap_textモデファイアは、Movable Type 4.1から追加されました。このモデファイアを指定すると、文字数N文字で改行するようになります。

サンプルコード

<MTEntries lastn="1">
<pre><MTEntryBody wrap_text="10"></pre>
</MTEntries>

動作サンプル(スクリーンショット)

samplemod_020_01.gif

count_wordsモデファイア(単語カウント)

2008年2月17日 14:36 | Writer: apstar | 記事本文

count_wordsモデファイアは、出力結果中に半角スペースで区切られた単語(文字の塊)が何個含まれているかを出力します。

文字に含まれるhtmlコードをカットするようremove_html="1"と併せて使用すると安定した結果を返します。なお、モデファイア指定の際は、remove_html="1"を、count_words="1"の前の位置へ持ってこないと正常にhtmlタグがカットされないようです。

この機能は、半角スペースを単語区切りとして使用しない日本語のサイトであるとあまり役には立ちませんが、単語を半角スペースで区切るのが普通な英語(外国語)サイトであると役に立ちそうです。

サンプルコード

<p>単語数:<MTEntryBody remove_html="1" count_words="1"> 語</p>

このエントリにサンプルコードを貼った動作サンプル

単語数:11 語

catモデファイア(文字付加)

2008年2月17日 14:50 | Writer: apstar | 記事本文

catモデファイアは、出力結果中に続けて、モデファイアで指定した文字列を出力します。

サンプルコード

<MTEntryTitle cat="[不許複製]">

このエントリにサンプルコードを貼った動作サンプル

catモデファイア(文字付加)[不許複製]

count_charactersモデファイア(文字数カウント)

2008年2月17日 15:30 | Writer: apstar | 記事本文

count_charactersモデファイアは、出力結果が何文字あるか、文字数を出力します。

空白やhtmlタグも含んでカウントします。

文字に含まれるhtmlコードをカットするようremove_html="1"と併せて使用すると安定した結果を返します。なお、モデファイア指定の際は、remove_html="1"を、count_characters="1"の前の位置へ持ってこないと正常にhtmlタグがカットされないようです。

サンプルコード

<p>文字数=<MTEntryBody remove_html="1" count_characters="1"></p>

このエントリにサンプルコードを貼った動作サンプル

文字数=352

count_paragraphsモデファイア(行数カウント)

2008年2月17日 15:37 | Writer: apstar | 記事本文

count_paragraphsモデファイアは、出力結果が何行あるか、行数を出力します。

サンプルコード

<p>行数=<MTEntryBody count_paragraphs="1"></p>

このエントリにサンプルコードを貼った動作サンプル

行数=5

repraceモデファイア(文字列置換)

2008年2月17日 15:43 | Writer: apstar | 記事本文

replaceモデファイアは、本来の出力結果から特定文字列の正規表現による置換を行い、その結果を出力します。

regex_replaceモデファイアも準備されていますが、コードの書き方が若干異なるだけで、機能は同等です。

サンプルコード(replace)

<MTEntryTitle replace="re","RE">

このエントリにサンプルコード(replace)を貼った動作サンプル

REpraceモデファイア(文字列置換)

サンプルコード(regex_replace)

<MTEntryTitle regex_replace="/re/","RE">

このエントリにサンプルコード(regex_replace)を貼った動作サンプル

REpraceモデファイア(文字列置換)

strip_tagsモデファイア(htmlタグ除去)

2008年2月17日 16:01 | Writer: apstar | 記事本文

strip_tagsモデファイアは、本来の出力結果からhtmlタグの除去を行い、その結果を出力します。

サンプルコード

<MTEntryBody strip_tags="1">

このエントリにサンプルコードを貼った動作サンプル

strip_tagsモデファイアは、本来の出力結果からhtmlタグの除去を行い、その結果を出力します。 サンプルコード <MTEntryBody strip_tags="1"> このエントリにサンプルコードを貼った動作サンプル

sprintfモデファイア(出力文字列加工)

2008年2月17日 16:06 | Writer: apstar | 記事本文

sprintfモデファイアは、出力結果をprintf のフォーマットで変換して出力します。

値の余白をゼロで埋めたり、少数以下の値がある演算結果を整数丸めしたり、多様な使用法が考えられます。

サンプルコードでは、12.3456という値を

というように加工してみます。

サンプルコード

<MTSetVar name="SampleValue" value="12.3456">
<MTGetVar name="SampleValue" sprintf="%d"><br />
<MTGetVar name="SampleValue" sprintf="%010s"><br />

このエントリにサンプルコードを貼った動作サンプル

12
00012.3456

zero_padモデファイア(数字0埋め)

2008年2月17日 16:17 | Writer: apstar | 記事本文

zero_padモデファイアは、出力結果が全体でN文字になるように余白を0で埋めて出力します。

エントリやカテゴリやアイテムのID番号を調べて並べ替えなどを行う場合に、IDをそのまま文字列として扱うと並び順がおかしくなります。余白をゼロ埋めして正しく並べなおすときなどに用います。

サンプルコードでは全カテゴリのIDを準備し、これの余白をゼロで埋めない場合と、全体で4文字となるようゼロで埋めた場合の出力結果を比較します。

サンプルコード

<p>IDをゼロ埋めしない場合</p>
<MTCategories>
   <MTSetvarBlock name="keyvalue"><$MTCategoryID$></MTSetvarBlock>
   <MTSetvarBlock name="ShowCategory" key="$keyvalue"><$MTCategoryLabel$></MTSetvarBlock>
</MTCategories>

<ul>
<MTLoop name="ShowCategory" sort_by="key">
   <li><$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$></li>
</MTLoop>
</ul>

<!-- いちど初期化 -->
<MTSetvar name="ShowCategory" value="">

<p>IDをゼロ埋めすると正しい順序で並ぶ</p>
<MTCategories>
   <MTSetvarBlock name="keyvalue"><$MTCategoryID zero_pad="4"$></MTSetvarBlock>
   <MTSetvarBlock name="ShowCategory" key="$keyvalue"><$MTCategoryLabel$></MTSetvarBlock>
</MTCategories>

<ul>
<MTLoop name="ShowCategory" sort_by="key">
   <li><$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$></li>
</MTLoop>
</ul>

このエントリにサンプルコードを貼った動作サンプル

IDをゼロ埋めしない場合

IDをゼロ埋めすると正しい順序で並ぶ

エントリ
タグ
はじめに
導入編
ローカル環境
変数
サンプル
その他
トラブル集
2008 mtde.info