はじめての DynamicMTML #10 - クエリを処理する4つのテンプレートタグ

DynamicMTML には、クエリを処理するテンプレートタグがいくつか用意されています。今日は、そのうちの4つ、MTQueryLoop、MTQueryVars、MTSetQueryVars、MTQuery を紹介します。 なお、検索サイトやサイト内検索からの流入の際に、検索されたキーワードを処理する MTReferralKeywords というタグもあります。これについては、前回の記事を参照して...

DynamicMTML には、クエリを処理するテンプレートタグがいくつか用意されています。今日は、そのうちの4つ、MTQueryLoop、MTQueryVars、MTSetQueryVars、MTQuery を紹介します。

なお、検索サイトやサイト内検索からの流入の際に、検索されたキーワードを処理する MTReferralKeywords というタグもあります。これについては、前回の記事を参照してください。

注意点

本題に入る前に、ひとつ注意点があります。クエリーの文字列を扱うときは、セキュリティを考慮して、モディファイアに「escape="html"」を付けるようにしましょう。

※この記事の公開時に、数ヶ所 escape="html" の記述が漏れていました。すいませんでした。

MTQueryLoop タグ(ブロックタグ)

MTQueryLoop タグは、key モディファイアで指定したクエリーの配列をループ出力するブロックタグです。クエリーの配列とは、foo[]=はじめて&foo[]=dynamicmtml といった形になります。

例えば、次のような URL のリクエストがあったとします。

http://tinybeans.info/search.html?q[]=はじめて&q[]=dynamicmtml

この場合は、次のように key モディファイアに q を指定して値を取り出せます。

<mt:DynamicMTML>
<mt:QueryLoop key="q" glue="<br />">
q = <mt:Var name="q" escape="html">
</mt:QueryLoop>
</mt:DynamicMTML>

出力結果は次のようになります。

q = はじめて
q = dynamicmtm

また、MTQueryLoop 内では、以下の値が MTVar にセットされます。

  • __key__ : key モディファイアで文字列
  • __value__ : key モディファイアで指定したクエリ文字列の配列の値
  • __first__ : ループの最初
  • __counter__ : ループの何回目か
  • __odd__ : 奇数回目の出力
  • __even__ : 偶数回目の出力
  • __last__ : ループの最後

つまり、先ほどのコードは次のように書いても同じ出力結果となります。

<mt:DynamicMTML>
<mt:QueryLoop key="q" glue="<br />">
<mt:Var name="__key__" escape="html"> = <mt:Var name="__value__" escape="html">
</mt:QueryLoop>
</mt:DynamicMTML>

MTQueryVars タグ(ブロックタグ)

MTQueryVars タグは、クエリー文字列の配列を変数 key と value にセットしてループ出力します。

例えば、次のような URL のリクエストがあったとします。

http://tinybeans.info/search.html?q=dynamicmtml&limit=5

この場合は、次のようにして値を取り出せます。

<mt:QueryVars glue="<br />">
<mt:Var name="key" escape="html"> = <mt:Var name="value" escape="html">
</mt:QueryVars>

出力結果は次のようになります。

q = dynamicmtml
limit = 5

MTQueryVars 内では、以下の値が MTVar にセットされます。

  • key : クエリのキーにあたる文字列
  • value : 上記 key に対する値
  • __first__ : ループの最初
  • __counter__ : ループの何回目か
  • __odd__ : 奇数回目の出力
  • __even__ : 偶数回目の出力
  • __last__ : ループの最後

ちなみに、クエリが「?q[]=はじめて&q[]=dynamicmtml&limit=5」という配列だと出力結果は次のようになります。

q = Array 
limit = 5

MTSetQueryVars タグ(ブロックタグ)

MTSetQueryVars タグは、リクエストのクエリー文字列を、キーの名前の変数に値をセットします。

例えば、次のような URL のリクエストがあったとします。

http://tinybeans.info/search.html?q=dynamicmtml&limit=5

この場合は、次のようにして値を取り出せます。

<mt:SetQueryVars>
q = <mt:Var name="q" escape="html"><br />
limit = <mt:Var name="limit" escape="html">
</mt:SetQueryVars>

出力結果は次のようになります。

q = dynamicmtml
limit = 5

先ほどの MTQueryVars はキーと値をセットで順次取り出しましたが、こちらの MTSetQueryVars は、キーの名前の変数名(q や limit など)を明示的に指定して値を取り出す形になります。

ちなみに、この変数が使えるのは MTSetQueryVars タグの中だけになります(他の2つのブロックタグも同様です)。つまり、次のテンプレートのように MTSetQueryVars タグの外側では何も出力されません。

<mt:DynamicMTML>
<mt:SetQueryVars>
中:<mt:Var name="q" escape="html">,<mt:Var name="limit" escape="html"><br />
</mt:SetQueryVars>
外:<mt:Var name="q" escape="html">,<mt:Var name="limit" escape="html">
</mt:DynamicMTML>

出力結果は次のとおりです。

中:dynamicmtml,5
外:,

MTSetQueryVars の外でも使いたい場合は、次の MTQuery タグを利用します。

MTQuery タグ(ファンクションタグ)

MTQuery タグは、key モディファイアで指定したクエリー文字列の値を出力します。

例えば、次のような URL のリクエストがあったとします。

http://tinybeans.info/search.html?q=dynamicmtml&limit=5

この場合は、次のようにして値を取り出せます。

<mt:DynamicMTML>
q = <mt:Query key="q" escape="html"><br />
limit = <mt:Query key="limit" escape="html">
</mt:DynamicMTML>

出力結果は次のようになります。

q = dynamicmtml
limit = 5

この MTQuery タグの値を変数にセットすれば、その後のテンプレートで自由に使うことができます。

<mt:DynamicMTML>
<mt:Query key="q" escape="html" setvar="query_q">
<mt:Query key="limit" escape="html" setvar="query_limit">
パラメータは、「?q=<mt:var name="query_q">&limit=<mt:var name="query_limit">」です。
</mt:DynamicMTML>

この出力結果は次のようになります。

パラメータは、「?q=dynamicmtml&limit=5」です。

以上です。

Published 2012-01-26
Updated 2019-06-25