note モディファイアでコメントを書くときの注意点と、プラグインなしでの変数の局所化する方法

2015-12-07
3分で読了
更新: 2025-12-14

目次

この記事は Movable Type Advent Calendar 2015 の 6日目の記事です。

今日で 39 歳になりました。毎年、自分の誕生日にブログを書くノルマを当てて自分を追い込む企画です。

今日はちょっと軽めに記事になってしまいますが、note モディファイアでコメントを書く方法と、プラグインなしで変数の局所化する方法をご紹介します。

note モディファイアでコメントを書くときの注意点

やはりお前らのMTMLは間違っている! の 66 ページにある「存在しないモディファイアは無視される」から note モディファイアでコメントを書くという方法、すごくいいですね。僕も早速取り入れています。

ただし、mt:Else には書いてはいけません。例えば、



fooあります。

fooありません。

このテンプレートの場合は、

fooあります。

が出力されます。

note モディファイアでコメントを書いてテンプレートも見やすいです。

これの1行目の value を 0 にすると「fooありません。」が出力されると思いきや、何も出力されません。



fooあります。

fooありません。

このコードは、実質的に内部では下記のように解釈されてしまいます。



fooあります。

fooありません。


なので、



fooあります。

fooありません。


ならちゃんと、

fooありません。

と出力されます。もちろん mt:Elsenote を付けなければ、



fooあります。

fooありません。


でも、

fooありません。

と出力されます。たぶん、ハマる人は結構いると思います。

mt:Include タグを使って変数を局所化する

やはりお前らのMTMLは間違っている! の 28 ページにある変数を局所化する mt:LocalVars タグ、すごい便利です。ぜひ MT 本体に取り入れて欲しいです!でもまあ、このあたりのグローバルとか変数のスコープの話になると MTMLer には苦しいかもしれません。。。プログラムのお勉強でつまずく最初の方の壁でしょうし。

さて、この変数の局所化ですが、 mt:Include を利用しても似たようなことができます(正しい動作かどうかはなんとなく疑問ですが)。

インデックステンプレートで、下記のようなテンプレートを用意します。


1.

4.

この中で読み込んでいる test モジュールの内容は下記の通りです。

2.

3.

変数が完全にグローバルであれば、期待する出力は、

1.tinybeans
2.bit part
3.mersy
4.mersy

ですが、実際には、

1.tinybeans
2.bit part
3.mersy
4.tinybeans

となります。つまり、 mt:Include タグでセットした who="bit part" も、モジュール内でセットした も、大元のインデックステンプレートの変数 who には影響していません。

この mt:Include タグでの変数の局所化のポイントとなるのは mt:Include タグでセットした who="bit part" モディファイアです。このモディファイアを削除して、


1.

4.

とすると、

1.tinybeans
2.tinybeans
3.mersy
4.mersy

となります。不思議ですね。

この方法は、いちいち局所化したい部分をモジュールに切り出さないといけないので、現実的には GetHashVarプラグイン の LocalVars タグを使ったほうが良いですが、上記の仕組みも知っているといいかもしれませんね。

以上です。 来年も Movable Type をもっと使い込んで楽しみましょう!!

この記事をシェア

関連記事