DynamicMTML には、クエリを処理するテンプレートタグがいくつか用意されています。今日は、そのうちの4つ、MTQueryLoop、MTQueryVars、MTSetQueryVars、MTQuery を紹介します。 なお、検索サイトやサイト内検索からの流入の際に、検索されたキーワードを処理する MTReferralKeywords というタグもあります。これについては、前回の記事を参照して...
DynamicMTML には、クエリを処理するテンプレートタグがいくつか用意されています。今日は、そのうちの4つ、MTQueryLoop、MTQueryVars、MTSetQueryVars、MTQuery を紹介します。
なお、検索サイトやサイト内検索からの流入の際に、検索されたキーワードを処理する MTReferralKeywords というタグもあります。これについては、前回の記事を参照してください。
本題に入る前に、ひとつ注意点があります。クエリーの文字列を扱うときは、セキュリティを考慮して、モディファイアに「escape="html"」を付けるようにしましょう。
※この記事の公開時に、数ヶ所 escape="html" の記述が漏れていました。すいませんでした。
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 にセットされます。
つまり、先ほどのコードは次のように書いても同じ出力結果となります。
<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 タグは、クエリー文字列の配列を変数 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 にセットされます。
ちなみに、クエリが「?q[]=はじめて&q[]=dynamicmtml&limit=5」という配列だと出力結果は次のようになります。
q = Array
limit = 5
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 タグは、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」です。
以上です。