基本編
グローバルモディファイアを使うとMTタグから出力される内容にフィルターをかけることができますが、「タグを取り除いてから指定の文字数に切り詰める」「HTMLエンコードしてから改行を<br />に変換する」など、いくつかのグローバルモディファイアを続けて適用したい場合があります。
おそらく多くの人が経験的に理解されているとは思いますが、MTでは書いた順に左から適用されます。HTMLのセマンティクスから考えると、指定した順序が意味を持つことにちょっと違和感はあるのですが、MTのこの動作はたまたまではなく、ちゃんとそう処理されるように仕組まれたものです。
<mt:SetVarBlock name="entry_contents">
<mt:EntryBody /><mt:EntryMore />
</mt:SetVarBlock>
<mt:Var name="entry_contents" strip_tags="1" trim_to="100" />
また同じモディファイアを繰り返し適用することもできるので、regex_replace を繰り替えしてコンテンツを整形することもできます。
<mt:SetVarBlock name="entry_contents">
<mt:EntryBody /><mt:EntryMore />
</mt:SetVarBlock>
<mt:Var
name="entry_contents"
regex_replace="/https?.*?png/","<img src=$& />"
regex_replace="/https?.*?pdf/","<a href=$&>$&</a>"
/>
ささいな Tips ですが、これを知っていると安心してグローバルモディファイアを組み合わせることができます。
応用編
グローバルフィルターをあえてたくさん組み合わせた例がこちらになります。はてなブックマークでコメントをもらったmt:Sectionを使っています。
<mt:Section
trim="1"
encode_html="1" nl2br="1" setvar="encoded"
_default="<mt:Var name=encoded />" mteval="1"
decode_html="1" strip_tags="1" setvar="stripped"
cat="<mt:Var name=encoded /><br /><br /><mt:Var name=stripped />" mteval="1"
>
<h1>Header</h1>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
</mt:Section>
以下のような出力になります。
<h1>Header</h1>
<ul>
<li>Item</li>
<li>Item</li>
</ul>
Header Item Item
もちろん実用性はありません。
コメントする