変数色々
昨日と今日,2日連続でMT関連のことを書いてしまいます.まぁ,わからん人は参考程度ということで読み飛ばしてください(^^;
MTのタグにも変数が存在することは知っていると思うのですが,変数の設定方法って色々あります.まぁ一番オーソドックスなのは<$MTSetVar name="変数名" value="値"$>
という形の設定方法だったりするんですが,中には変数に格納する値が複数行に渡っていたり,Perlと同じように配列変数やハッシュ変数というものも存在してたりします.俺自身はBASIC(懐かしいな)からプログラムに触れ,C言語,通信マクロ言語(mmi),Perl...と覚えていったので比較的理解は早かったのかな?なんて思っていますが,初めて変数に触ったのがMTということだと,覚えるのに苦労するのではないかと思います.
そこで,MT限定になってしまいますが,変数の設定の仕方も一つしか無いというわけではないので,そこら辺をサクッと書いておきたいと思います.
一つの変数に任意の文字列を設定する方法
通常は先程も書いたとおりMTSetVarを使うのが一般的です.ただし,いろんな方法が考えられます.
<$MTSetVar name="foo" value="コラム"$> <MTSetVars>foo=コラム</MTSetVars>
まぁ,一つの変数を指定するのにわざわざMTSetVarsを使う人がどうかしているのでしょうが,可能は可能です.
一つの変数に一つのMTタグの内容だけを設定する方法
俺も含め他の方のソースとかをよく見ると分かりますけど,よく見られるのはMTSetVarBlockを使う方法です.でもこれにも様々な方法が存在します.
<MTSetVarBlock name="foo"><$MTEntryDate format="%y%m"$></MTSetVarBlock> <$MTEntryDate format="%y%m" setvar="foo"$> <MTSetVars>foo=<$MTEntryDate format="%y%m"$></MTSetVars>
MTタグには「グローバルモディファイア」というものが存在するのですが,この中にsetvarというモディファイアがありまして,これを指定したMTタグについては変数に格納するという処理のみを行うことになっています.当然他のモディファイアをつけた場合にはそのモディファイアを実行した上で変数に格納する事となります.
視覚的に分かりやすいのはMTSetVarBlockでの指定方法なのかもしれませんが,MTSetVarBlock内では改行コードも含めて変数に取り込まれてしまいますので,変数の値によって分岐する際にはちょっと不便です.改行コードを変数に入れたくないという人はsetvarを使ったほうがいいと思います.
実はこのsetvar,結構面白い使い方が出来ます.当然グローバルモディファイアなのでブロックタグにも使うことが出来ちゃったりするのですが,「ファンクションタグだけど表示される中身が複数行で構成されているもの」でも変数化してくれます.一番代表的なものだとMTIncludeになるのですが,最初「これは出来ないだろう」と思っていたので,試してみて予想通りの結果になった時には少し感動したのでした.
一つの変数に二つ以上のMTタグないし複数行の文字列を設定する方法
これはMTSetVarBlock一択だと思っていませんか?実はそうでもありませんよ?
<MTSetVarBlock name="foo"> <p> <a href="./<$MTEntryDate format="%y%m"$>/"><$MTEntryDate format="%y年%m月"$></a> </p> </MTSetVarBlock> (上記<p>~</p>をモジュールテンプレートmonthとして保存した場合) <MTSetVarBlock name="foo"><$MTInclude module="month"$></MTSetVarBlock> <$MTInclude module="month" setvar="foo"$> <MTSetVars>foo=<$MTInclude module="month"$></MTSetVars>
先ほど書いたように,複数行自体をモジュールとして登録すればMTInclude出来るわけですから,そのMTInclude自体を変数化してしまえばいいのです.ただし,モジュールテンプレートが乱立する可能性は捨てきれませんので,これは時と場合によって使い分けが必要ですねってことで(ぉ
連続して変数を登録したい場合
これはMTSetVars一択です.詳しくはMTSetVars | テンプレートタグリファレンスを読んでください(手抜き).
ただし,複数行に渡る変数を連続して登録するとか,ハッシュ変数を連続して登録するというのには向きません.この場合は一つ一つ登録するとか,ハッシュ変数の場合はMTSetHashVar等を使ってください.配列変数の場合は...foo[0]=タグ0
でいけるのかな?今度試してみます(^^;
まとめじゃなくおまけ(え?
MTSetVarはエイリアスとしてMTVarでも同じ動作をすることとなっています.ただしこのMTVarは変数の内容を表示するMTGetVarともエイリアスとなってまして,結構混乱のもとだったりします.まぁ,valueが入っていればMTSetVarということでかろうじて理解は出来ますけど(^^;
俺自身はMTVarは極力使わず,変数設定にはMTSetVar,変数の表示にはMTGetVarと使い分けています.ソースを公開する時にはできるだけそうした方が分かりやすいと思います.
Comments:0