MovableType4の変数について

Posted by
ぴろり
Posted at
2008/02/23 18:08
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
MovableType カテゴリ

 MovableType4 で大幅に強化された変数関係のタグによって、強力な programmability を備えたテンプレートですが、公式ドキュメントだけではイマイチ仕様がわからない部分があったり、加えて、掲載されていない様々な隠し機能があるようです。ソースコードを眺めたり再構築を繰り返すこと億千万回、少し判ったことをまとめてみました。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

 変数関係のテンプレートタグで重要な MTSetVar(mt:setvar)MTGetVar(mt:var)/mt/lib/MT/Template/ContextHandlers.pm にその実装があります。ここを見ると、公式ドキュメントには掲載されていないようなオプションが発見でき、またその仕様についても明らかになる部分が多々あります。

変数名として使用可能な文字列

 変数名として使用できる文字列については、ほとんど制限がないと言えます。以下のテンプレートは、変数名として使用できる文字列を調べてみた結果です。
 変数名の先頭が $で始まる変数参照、[...]を含む配列参照、{...}を含む連想配列参照以外の制限は特になく、ほぼどのような変数名でも使えるようです。そのため、C言語の構造体を真似て "global.format.timestamp" という変数名を使うもよし(実際は構造体でも何でもありません)、ディレクトリパス風に "global/format/timestamp" という変数名を使うもよし、様々なバリエーションが可能です。マルチバイトの変数名も使えるので、日本語で"短い日付書式"なんて変数名もありです(実用性はともかくとして)

# v に指定された名前の変数に値を入力し、その値を表示する
<mt:setvartemplate name="show_var">
  <mt:setvar name="$v" value="$v"><mt:getvar name="$v">(<mt:getvar name="a">)
</mt:setvartemplate>

# C,Perl など多くの言語で一般的な変数名
- <mt:setvar name="v" value="a"><mt:var name="show_var"> = a
- <mt:setvar name="v" value="_a"><mt:var name="show_var"> = _a
# 変数名の大文字と小文字の違い
- <mt:setvar name="v" value="A"><mt:var name="show_var"> = A
# 数字だけの変数名
- <mt:setvar name="v" value="1"><mt:var name="show_var"> = 1
# 記号から始まる変数名
- <mt:setvar name="v" value="-a"><mt:var name="show_var"> = -a
- <mt:setvar name="v" value="~a"><mt:var name="show_var"> = ~a
- <mt:setvar name="v" value=":a"><mt:var name="show_var"> = :a
- <mt:setvar name="v" value=".a"><mt:var name="show_var"> = .a
- <mt:setvar name="v" value=",a"><mt:var name="show_var"> = ,a
- <mt:setvar name="v" value="!a"><mt:var name="show_var"> = !a
- <mt:setvar name="v" value="#a"><mt:var name="show_var"> = #a
- <mt:setvar name="v" value="%a"><mt:var name="show_var"> = %a
- <mt:setvar name="v" value="&a"><mt:var name="show_var"> = &a
# 先頭以外に変数参照の$を含む変数名
- <mt:setvar name="v" value="a$"><mt:var name="show_var"> = a$
# 記号を含む変数名
- <mt:setvar name="v" value="a->a"><mt:var name="show_var"> = a->a
- <mt:setvar name="v" value="a/a"><mt:var name="show_var"> = a/a
# 空白文字を含む変数名
- <mt:setvar name="v" value="a "><mt:var name="show_var"> = a(一文字分の空白)
- <mt:setvar name="v" value=" a"><mt:var name="show_var"> = (一文字分の空白)a
- <mt:setvar name="v" value="a a"><mt:var name="show_var"> = a(一文字分の空白)a
# マルチバイト文字列による変数名
- <mt:setvar name="v" value="日本語"><mt:var name="show_var"> = 日本語

変数名は大文字小文字を区別しない

 先の結果のように自由度が高い変数名は、その大文字と小文字については区別せず同じに扱うため注意が必要です。

・異なる変数名での読出し
<mt:setvar name="foo" value="123">
- <mt:var name="foo"> = 123
- <mt:var name="Foo"> = 123
- <mt:var name="fOO"> = 123

・異なる変数名への書込み
- <mt:setvar name="foo" value="123"><mt:var name="foo"> = 123
- <mt:setvar name="Foo" value="456"><mt:var name="foo"> = 456
- <mt:setvar name="fOO" value="789"><mt:var name="foo"> = 789

隠しオプション(?)

 ドキュメントに掲載されていないオプションがあるようです。

<mt:setvar name="bar" index="1" value="123">
<mt:setvar name="bar" index="2" value="456">
<mt:setvar name="bar" index="3" value="789">
- <mt:var name="bar"> = 123456789
- <mt:var name="bar" glue=","> = ,123,456,789
# 配列に限定しません
- <mt:var name="bar" to_json="1"> = [null,123,456,789]
- <mt:var name="bar" index="100" default="hoge"> = hoge

文字列として結合する

 MTのテンプレート内で多用されているオプションは、ユーザのカスタムテンプレート中でももちろん使えます。現在の変数の保持する値の前後に文字列として値を結合することができます。

<mt:setvar name="foo" value="123">
<mt:setvar name="foo" value="ABC" prepend="1">
- <mt:var name="foo"> = ABC123
<mt:setvar name="foo" value="XYZ" append="1">
- <mt:var name="foo"> = ABC123XYZ

環境変数・パラメータ変数の読出し

 MTの環境設定値やURLに指定されたクエリパラメータを読み出すことができます。こちらは読出し専用で値を書込むことはできません。

# mt-config.cgi の設定値を読み出す
# DBPassword などは参照できない
- <mt:var name="config.StaticWebPath"> = /cgi-bin/mt/t-static/
# URLのクエリパラメータを読み出す(未確認)
- <mt:var name="request.search"> = (検索文字列)

未定義の変数

 未定義の変数への代入や参照について。('08/03/07 追記)

tags{hoge}, tags{fuga} は未定義として
<MTSetVar name="tags" key="hoge" op="++">
- <MTGetVar name="tags" key="hoge"> = (定義されない)
<MTSetVar name="tags" key="fuga" value="1" op="+">
- <MTGetVar name="tags" key="fuga"> = 1
この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  


この記事のアーカイブ

全ての記事 »
2008年
全てのカテゴリ »
MovableType
全てのタグ »
,

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。