カテゴリを記事が投稿された順に表示する(その1)

mixiのMTのコミュニティで、以下のような質問を見かけました。

  • 各カテゴリの最新記事を1件ずつ出力したい
  • カテゴリは記事の新しい順に並べたい
  • 出力するカテゴリは最大で3件

MTCategoriesタグ等にはこのような機能はありませんが、ハッシュを使えばほぼ可能です。
今日は、テンプレートを組む前の予備知識として、ハッシュについて解説します。

1.ハッシュについて

MT4で、テンプレート内で変数を扱う機能が強化され、「ハッシュ(Hash)」という変数を扱うことができるようになりました。
ハッシュとは、「キー」と「値」のペアで、表のようなデータを扱うものです。

例えば、以下のような表があるとします。

名前年齢
yamada35
tanaka29
suzuki33

この表は、「名前」と「年齢」のペアからできた表です。
名前をキー、年齢を値とすれば、ハッシュとして扱うことができます。

2.ハッシュ関係への値の設定と出力

ハッシュに値を設定するには、MTSetVarタグを使って以下のように書きます。

<mt:SetVar name="ハッシュ名" key="キー" value="値">

また、ハッシュの中から、キーを指定して、それに対応する値を出力するには、MTGetVarタグを使って以下のように書きます。

<mt:GetVar name="ハッシュ名" key="キー">

例えば、最初にあげた表を、「people」という名前のハッシュに保存するなら、以下のように書きます。

<mt:SetVar name="people" key="yamada" value="35">
<mt:SetVar name="people" key="tanaka" value="29">
<mt:SetVar name="people" key="suzuki" value="33">

また、上のようにハッシュが定義されている場合、以下のタグが処理されるとします。
これは、キー「yamada」に対応する値を出力するタグですので、出力結果は「35」になります。

<mt:GetVar name="people" key="yamada">

3.ハッシュの並べ替え

MTLoopというタグを使うと、ハッシュのすべての要素を順に出力することができます。
「sort_by」というモディファイアを付けて、キーか値で並べ替えて出力したり、出力順を逆にしたりすることができます。

<mt:Loop name="ハッシュの名前" sort_by="並べ替え方法">
  ハッシュの個々の要素に対する処理
</mt:Loop>

また、MTLoopタグのブロックの中では、ハッシュの個々の要素のキーと値は、それぞれ「__key__」「__value__」という変数で得ることができます(keyとvalueの前後にアンダースコア2つずつ)。

例えば、前述したように、名前と年齢の表を、名前をキー、年齢を値として、「people」という名前のハッシュに設定したとします。
この場合、以下のように書くと、名前と年齢の情報を名前のアルファベット順に出力することができます。

<mt:Loop name="people" sort_by="key">
  名前 = <mt:GetVar name="__key__">, 年齢 = <mt:GetVar name="__value__">
</mt:Loop>

また、以下のように書くと、年齢の逆順(高い順)に出力することができます。

<mt:Loop name="people" sort_by="value reverse">
  名前 = <mt:GetVar name="__key__">, 年齢 = <mt:GetVar name="__value__">
</mt:Loop>