【Movable Type】mt:SetVarBlock内の改行を消す方法

Posted on
【Movable Type】mt:SetVarBlock内の改行を消す方法

mtで変数を設定する際によく使うmt:SetVarBlockというブロックタグがありますが、改行が原因で意図した動作にならなかったのでそのときの解消法のメモです。

mt:SetVarBlockは以下のように記事のタイトルを変数にいれて、タイトルがhogeのときとそれ以外のときで出力する内容を出し分けたいときなどに使用することができます。

<mt:SetVarBlock name="entryTtl"><mt:EntryTitle></mt:SetVarBlock>

<mt:If name="entryTtl" eq="hoge">
△△△
<mt:Else>
●●●
</mt:If>

上記の記述では問題なく記事のタイトルで分岐できるのですが、次のようにmt:SetVarBlock内で改行すると意図した動作になりません。

<mt:SetVarBlock name="entryTtl">
<mt:EntryTitle>
</mt:SetVarBlock>

<mt:If name="entryTtl" eq="hoge">
△△△
<mt:Else>
●●●
</mt:If>

これはmt:SetVarBlock内で改行していることにより、設定される変数が[改行]+[記事タイトル]+[改行]のようになってしまい意図した文字列になっていないことが原因です。

mt:SetVarBlock内の記述量が少ない場合は改行せずに1行に収めてしまえば良いのですが、場合によってはif文を書いたりして記述量が多くなり1行に収めてしまうと何をしているのかが分かりづらくなるケースもあるかと思います。

そのような場合は改行がついた変数からstrip_linefeedsとregex_replaceモディファイアを使用して改行コード、インデント、空行などの不要なものを取り除き、再度変数に入れ直したものを使用することで解消することができます。

<mt:SetVarBlock name="entryTtl">
  <mt:EntryTitle>
</mt:SetVarBlock>

<mt:SetVarBlock name="newEntryTtl"><mt:Var name="entryTtl" strip_linefeeds="1" regex_replace="/[\ \t\r\n]+/mg",""></mt:SetVarBlock>

<mt:If name="newEntryTtl" eq="hoge">
△△△
<mt:Else>
●●●
</mt:If>

記述は1行増えてしまいますがmt:SetVarBlock内が複雑な場合などはコードが見やすくなるためおすすめです。

おしまい。