MT | memo-memo - Part 2 Skip to content

memo-memo

web制作に便利そうな情報をメモるブログ

Archive

Tag: MT

MTで繰り返しを処理するには、forとloopがある。
まずは、forの使い方。

<mt:for var="i" from="1" to="10">
 <$mt:setvar name="foo[$i]" value="$i"$>
</mt:for>
<mt:for var="i" from="1" to="10">
<p><$mt:getvar name="foo[$i]"$></p>
</mt:for>

まずは、青文字のところで、配列fooに値を代入。
foo[1]=1
foo[2]=2
.
.
.
foo[10]=10
が代入される。その後、赤文字の文で出力させる。
基本的な文法は、

<mt:for var="変数名" from="開始" to="終わり" increment="増加値">
処理
</mt:for>

こんな感じ。incrementは省略OK。省略した場合は1ずつ増加する。
次は、loopの説明。

<mt:sethashvar name="week">
 <$mt:setvar name="mon" value="Monday"$>
 <$mt:setvar name="tue" value="Tuesday"$>
 <$mt:setvar name="wed" value="Wednesday"$>
 <$mt:setvar name="thu" value="Thursday"$>
 <$mt:setvar name="wed" value="Wednesday"$>
 <$mt:setvar name="sat" value="Saturday"$>
 <$mt:setvar name="sun" value="Sunday"$>
</mt:sethashvar>

<mt:loop name="week" sort_by="key">
<dl>
 <dt><$mt:getvar name="__key__"$></dt>
 <dd><$mt:getvar name="__value__"$></dd>
</dl>
</mt:loop>

青文字で、ハッシュweekに値を代入。
week{mon} = Monday
week{tue} = Tuesday
.
.
.
week{sun} = Sunday
こんな感じで格納される。
次に赤文字で出力する。この場合出力されたのは、下記の様なhtml。

<dl>
 <dt>mon</dt>
 <dd>Monday</dd>
</dl>
<dl>
 <dt>sat</dt>
 <dd>Saturday</dd>
</dl>
<dl>
 <dt>sun</dt>
 <dd>Sunday</dd>
</dl>
<dl>
 <dt>thu</dt>
 <dd>Thursday</dd>
</dl>
<dl>
 <dt>tue</dt>
 <dd>Tuesday</dd>
</dl>

ハッシュには、順序性が無く、sort_byで指定した規則に基づいて出力されるらしい。

1:キーの文字列順
sort_by="key"
2:キーの文字列順(逆順)
sort_by="key reverse"
3:キーに対応する値の文字列順
sort_by="value"
4:キーに対応する値の文字列順(逆順)
sort_by="value reverse"
5:キーに対応する値の文字を数値として比較・並べ替える
sort_by="value numeric"
6:キーに対応する値の文字を数値として比較・並べ替える(逆順)
sort_by="value numeric reverse"

こんな感じ。
loopの基本的な文法。

<mt:loop name="変数名">
処理
</mt:loop>

forとの違いは、繰り返す条件を指定しない所。
詳しくは、リファレンスにて。
forのMTリファレンス
loopのMTリファレンス

MTでの、ハッシュの扱い方。

<mt:sethashvar name="week">
 <$mt:setvar name="mon" value="Monday"$>
 <$mt:setvar name="tue" value="Tuesday"$>
 <$mt:setvar name="wed" value="Wednesday"$>
 <$mt:setvar name="thu" value="Thursday"$>
 <$mt:setvar name="fri" value="friday"$>
 <$mt:setvar name="sat" value="Saturday"$>
 <$mt:setvar name="sun" value="Sunday"$>
</mt:sethashvar>

<$mt:getvar name="week{mon}"$>

この場合、Mondayが出力される。この辺は、他のプログラムの連想配列と一緒っぽい。

若干違うのは、入れ子になった場合。

<mt:sethashvar name="week">
<mt:sethashvar name="ampm">
<$mt:setvar name="am" value="AM"$>
<$mt:setvar name="pm" value="PM"$>
</mt:sethashvar>
</mt:sethashvar>
<$mt:getvar name="week{ampm}" setvar="hoge"$>
<$mt:getvar name="hoge{am}"$>

上記の様に、一旦別の変数に(今回はhoge)入れてから、キーを指定して取得するっぽい。

こちらのサイトに詳しく載ってます。

http://www.koikikukan.com/archives/2009/12/15-005555.php

MTでの配列の指定の仕方、

<$mt:setvar name="week[0]" value="Monday"$>
<$mt:setvar name="week[1]" value="Tuesday"$>
<$mt:setvar name="week[2]" value="Wednesday"$>
<$mt:setvar name="week[3]" value="Thursday"$>
<$mt:setvar name="week[4]" value="Friday"$>
<$mt:setvar name="week[5]" value="Saturday"$>
<$mt:setvar name="week[6]" value="Sunday"$>
week[0]〜week[6]まで、Monday〜Sundayが、格納されてます。<br />
配列の一番最初の要素は、<$mt:getvar name="shift(week)"$>です。<br />
配列の一番最後の要素は、<$mt:getvar name="pop(week)"$>です。<br />
配列の個数は、<$mt:getvar name="count(week)"$>です。<br />
出力した後に、配列に要素を加えたらどうなる?<br />
<$mt:setvar name="push(week)" value="last"$>
<$mt:setvar name="unshift(week)" value="first"$>
配列の一番最初の要素は、<$mt:getvar name="shift(week)"$>です。<br />
配列の一番最後の要素は、<$mt:getvar name="pop(week)"$>です。<br />

上記のコードを書いたテンプレートを書き出すと、

week[0]〜week[6]まで、Monday〜Sundayが、格納されてます。
 配列の一番最初の要素は、Mondayです。
 配列の一番最後の要素は、Sundayです。
 配列の個数は、5です。
 出力した後に、配列に要素を加えたらどうなる?
 配列の一番最初の要素は、firstです。
 配列の一番最後の要素は、lastです。

こうなります。

どうやら、javascriptとかの配列と、同じ様に出力した後に、扱えそうです。

http://sklgheirhn.uh-oh.jp/hairetu.html

これははまった。
練習用にインストールしたMTで、記事に付けるタグが、上手く表示されない事態に陥った。
具体的には、ある一つの日本語のタグを、複数の記事に付与した場合、普通は、

あるタグ(2)

こんな感じに表示されるはず。
でも実際は、

あるタグ(1)
あるタグ(1)

こんな感じで、2つの記事に、「あるタグ」というタグが付くんじゃなくて、2つの「あるタグ」というタグが、各々の記事に付いてしまう。(日本語が難しい。)
今回の現象は、さくらインターネットのサーバーで起こりました。
八方手を尽くして、結局再インストールしたけど、正確な理由は解らないけど、多分DBの文字コードがshift-jisだったのが良くない気がする。
MTをインストールするときに、自動で生成されるテーブルが、全部shift-jisで作られてしまってました。
phpMyAdminで、選択したデータベースの「操作」タブで、「照合順序」を「utf8_general_ci」にしたら、自動で生成されたテーブルも、ちゃんとutf-8で生成されて、無事に治りました。
わざわざ設定しなくちゃいけないのが、若干めんどう。今回だけの現象かな?
まぁとりあえず治って良かった。

まずはコードから。

<mt:setvarblock name="entrycategory"><MTEntryCategory glue=" or "></mt:setvarblock>
<dl>
<dt>同一カテゴリーに含まれるブログ記事一覧</dt>
<dd>
<ul>
<MTEntries lastn="3" categyry="$entrycategory">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</dd>
</dl>

赤文字ので、変数entrycategoryにその記事に割り当てられているカテゴリーと副カテゴリーを「or」で区切りつつ代入する。
例えば、その記事のカテゴリーが、「web制作」で、副カテゴリーが「html」だった場合、変数entrycategotyには、「web制作 or html」が格納される。
後は、その後の青文字ので、カテゴリーを「category=”$entrycategory”」で指定しつつ、(この場合)「lastn=”3″」で取得する件数を3件に取得しつつ、繰り返し出力すればOK。
上記のコードを、「ブログ記事」テンプレートに記述すれば、きちんと出力されました。
とりあえずメモ。