Under the Bridge

a Picture of the Late Him

カテゴリ名の全取得、配列へセットする

2008年1月 1日 12:27 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

Movable Type 4.1から使用が可能になると思われる、「すべてのカテゴリ名を取得」するサンプル。カテゴリ名の取得が目新しいのではなく、配列へセットして後で使用するところが新しい。このサンプルでは、取得したカテゴリ名データを配列へ格納し、後にForループで使用するという、ごく基本的で最小限なもの。

どうも、Movable Type 4.1は、このようなMTSetVar、MTSetVarBlock、MTIf、MTForなどのようなテンプレートタグと変数、配列、それとインクリメントを駆使すれば、今まで実現できなかったことが割りと手軽に実現できるぽい。以下に示すのはMovable Type 4.1で有効な配列変数の作り方と、Forループの2つの要素を含んだサンプルである。

サンプルコード

以下。なお、テストはテンプレートではなくエントリにeval-templateプラグインを適用してエントリ中に直接コードを記述している(エントリ中でテンプレートタグを使えるようにするプラグイン)。


<$mt:setvar name="counter" value="0"$>
<MTCategories>
<$mt:setvar name="counter" op="++"$>
<MTSetvarBlock name="ShowCategory[$counter]"><$MTCategoryLabel$></MTSetvarBlock>
</MTCategories>

<mt:for var="x" from="1" to="$counter">
<MTGetVar name="ShowCategory[$x]">
</mt:for>

説明および考察

1行目:counterという名称の変数を0で初期化する。なおエントリ中にeval-templateを用いたテストではこの一行が無いとなぜか投稿時にエラーとなる。

2行目:MTCategoriesブロックタグループ開始。

3行目:counter変数を+1インクリメントする。

4行目:ShowCategory[]配列へカテゴリラベルをセット。配列カッコ内でcounter変数を扱うときは先頭へドルマークを付加する。

5行目:MTCategoriesブロックタグループ終了。

6行目:空白。意味は無い。

7行目:Forループ開始。カウンタにはxを用いているが、何でもよい。toでループ上限に使用しているのは、先のカテゴリループでインクリメントしたcounter変数である。これは結局のところカテゴリ数を記憶したままなのでこれをそのまま利用する。先頭にはドルマークを付加すること。

8行目:ShowCategory[]配列を取り出す。カッコ内の配列要素xはForループのカウンタである。先頭へドルマークを付加すること。ここでは単にカテゴリ名の表示にとどめている。

9行目:Forループ終了。

このサンプルでは配列の下限が1、上限は無し、である。

2008/1/1追記:MTGetVar name="ShowCategory" function="pop"で配列の最大インデックスの値を、 function="shift"で配列先頭の値を取得できるようだ。「上限は無し」というのは、静的に配列宣言する必要が無く、上限は実行中に可変である、という意味である。小粋空間のこのエントリに関連する記述があった。

2008/1/2追記:MTGetVar name="ShowCategory" function="pop"だが、「テンプレートタグMTGetVarでエラーが発生しました: popという関数はサポートされていません。」と出てしまうま。なんか、まちがったかな?

トラックバック(0)

このブログ記事を参照しているブログ一覧: カテゴリ名の全取得、配列へセットする

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)