先日、Movable TypeのプラグインでMTMLをシンプルにするの中で、以下のMTMLを書いていました。
<mt:SubCategories>
<mt:If tag="CategoryCount">
<h3><mt:CategoryLabel></h3>
<mt:Var name="entries_template">
</mt:If>
</mt:SubCategories>
記事が0件の時に何らかの文言を挿入する等があれば mt:If タグで記事数をチェックする利点はあるものの、コード量やネストが増える事を考えると mt:Categories タグに存在する show_empty モディファイアが mt:SubCategories タグにもあれば良いなと感じていました。
そこでプラグインの習作も兼ねて show_empty モディファイアを実装しました。
グローバル・モディファイア自体はグローバル・モディファイアプラグインの開発についての解説に従って進めれば簡単に作成可能です。直感的なネーミングがぱっと思い浮かばなかったので mt:Categories タグに習って show_empty モディファイアが0の時は表示しないようにしました。
以下のように指定すると記事が0件のサブカテゴリは出力しないように出来ます。
<mt:SubCategories show_empty="0">
<h3><mt:CategoryLabel></h3>
<mt:Var name="entries_template">
</mt:SubCategories>
既存のMTタグにモディファイアの追加が出来ないか
今回は実質 Categories 系のタグ専用であるにも関わらず、グローバル・モディファイアとして show_empty を実装した事に違和感を感じ、mt:SubCategories タグだけにモディファイアの追加が出来ないものかと考えました。
調査した感じだと既存のMTタグにモディファイアを追加する場合は以下のように config.yaml にフィルターとして追加すれば実装出来るようです(未確認)。
tags:
filters:
SubCategories:
show_empty:
handler: $foo::foo::Tags::_hdlr_show_empty
今回のケースだとグローバル・モディファイアである必要はない、といった実装上の気持ち悪さはもちろんですが、グローバル・モディファイアのようにあらゆるタグで使用される事を想定しなくても済むため、こちらの方がシンプルに実装出来そうです。近々試したいと思います。