Mar 01

2008

SetVar、GetVarがわからない僕へ ~Movable Type 4.1 テンプレート読解第1回

最初に

MT4からはタグの書き方の自由度が増しました。

<$MTEntryTitle$>
<$MTEnTRyTitle$>
<$mtentrytitle$>
<mt:entrytitle />

以上4つの書き方全てがMTタグとして有効です。要するに「小文字大文字織り交ぜてもいいぞ」、ということと新たに「mt:」という表記方法も増えたっちゅーことですね。

MT4.XのStage1のボス、SetVar/GetVar

SetVarとGetVar。よくわかんないですよねー。MT4.X系にアップグレードしたあと、テンプレートを覗いて途方にくれました。つい最近、HTML/CSSが読めるようになっただけで天狗になっていた僕にとっては、暗号以外の何者でもありませんでした。頼りのMovable Type 4 ドキュメントにも解説少ないし・・。

とりあえずSetVarとGetVarって何の略?

Varとはvariable(変数)の略だそうです。変数を「セット」したり「ゲット」したりするわけですね。ポケモンげっとだぜ!

変数に名前をつけて値をセットしよう!

<$MTSetVar name="inu" value="taro"$> - (1)

以上の記述をMTテンプレート内でした場合。「inu」と名前をつけた変数には「taro」という値をセットしてあげる!ってことになります。タロ・ジロ!

セットしたらいつでも取り出せる!

で、SetVarはGetVarとセットで使うべしとのこと。Setしたのなら活用したいですよね。そんな時にGetVar

(※注 MTGetVarとMTVarは同義!もちろんMTVarとmt:varも同義!つまりMTGetVarとmt:varは同義!!)

(1)のような記述をした上で

<$MTGetVar name="inu"$>

または

<mt:var name="inu">

とテンプレートに書き込んだら、構築後のHTMLファイルにはなんと!

taro

と出て来るのです!。ふーんって感じですよね。それなら最初から「taro」と書けよ、と。思いますよね!

value="1"ってなんだよ!ヽ(`Д´)ノ

<$MTSetVar name="main-index" value="1"$> - (2)

というもの。テンプレートを覗いてみると、こんな調子の記述がぽんぽん出てきます。僕の場合これで躓きました。さっきの例で行くと「main-index」と名前をつけた変数には「1」という値をセットしてあげるって読めますよね。うーんだからなんなんだろ、といった感じでした。

じゃあGetVarしてやらないと!値を取り出さないと!(心の叫び)

でも今回は取り出さないんです。

MTテンプレートの中で(2)のような「値を1とセットする」記述は「テンプレートを判別するのに」使います。後述しますが「if / Unless / Else」といったものを使うときに活きてきます。

(2)は「このテンプレートでmain-indexという名の変数は有効か?はい、そうです!」と宣言することになります。

判別する、とは・・・?

ここで「if / Unless / Else」の出番です。

(2)とテンプレート内に記述した上で

<mt:if name="main-index">
<!-- do something -->
</mt:if>

こういった記述をしたら。「main-indexという変数の値が0以外の場合は実行しちゃうよ~」という意になります。(2)では値を「1」をセットしてるので実行するわけです。

少し複雑に

<mt:if name="main-index">
<h1 id="header-name"><a href="<$MTBlogURL$>" ><$MTBlogName$></a></h1>
<mt:else>
 <div id="header-name"><a href="<$MTBlogURL$>"><$MTBlogName$></a></div>
</mt:if>

こうなると、

「もしこのテンプレートでmain-indexという変数が有効なら(値が0以外なら)<h1>つらつら、もしそうでないならば<div>つらつら」

となります。デフォルトテンプレートでmain-indexについて値が1とセットされているものは「メインページ」のみです。メインページではブログタイトルはh1要素でくくってそれ以外のテンプレート、例えばブログ記事テンプレート(旧エントリー・アーカイブ)ではブログタイトルはdiv要素でタギングしています。個別エントリーページでは、記事のタイトルがh1要素でタギングされることとなります。

ブロックタグにもなるよ

つぎに「MTSetVarBlock」。他の書き方をしてみると「mt:setvarblock」等ですかね。これは値をセットしようにもダブルクォーテーションの中に書くには適切でない場合(例えばMTタグなどはダブルクォーテーションの中に記述できません)に「MTSetVar」がブロック化したものです。例えば以下のように使います。

<MTSetVarBlock name="html_head">
<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTLink template="atom"$>" />
</MTSetVar>

「html_head」という変数の値を「<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTLink template="atom"$>" />」としますよ、と。

<MTGetVar name="html_head">

とMTテンプレートに記述すると

<link rel="alternate" type="application/atom+xml" title="Atom" href="<$MTLink template="atom"$>" />

と出力されるわけですね。

とりあえず今日はここまで!

参考ページ
小粋空間: Movable Type 4 のテンプレート構造
Movable Type 4 的テンプレート管理 上之郷谷太一 - Six Apart (注 pdfファイルです)