グローバルモディファイアの適用順序

MT-column > Tips
| | コメント(0) | トラックバック(0)

基本編

グローバルモディファイアを使うと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

もちろん実用性はありません。

トラックバック(0)

このブログ記事を参照しているブログ一覧: グローバルモディファイアの適用順序

このブログ記事に対するトラックバックURL: https://tec.toi-planning.net/mtos/mt-tb.cgi/433

コメントする

Created by ToI企画
Powered by Movable Type 5.2.2