top

エントリーを更新順にソートする~更新リストの作り方(3) MT4改

これは以前書いた「エントリーを更新順にソートする~更新リストの作り方(2) MT4版」の改訂版です。更新リストの応用編として、カスタムフィールドを利用した「誤字・脱字の修正は更新リストに反映させない案」も書いていたのですが、まだMTの変数への理解が浅かったため、あまりいい例になっていませんでした。4.2ではカスタムフィールドの値で直接ソートも出来るようになったので、4.2登場の機会に4.2での使用例も含めてまとめ直しました。

■基本編:更新のあったエントリーを最新10件分表示する
limitモディファイアを使った基本的な方法。

<MTEntries limit="10" sort_by="modified_on">
<MTEntriesHeader><ul></MTEntriesHeader>
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>

■応用編:更新一覧に表示させたいエントリーのみ最新10件分表示する
上の方法でもいいけど、やっぱり誤字・脱字のような中身のない修正は更新リストには載せたくない場合。内容に更新があった場合のみ更新リストに反映させるための方法です。

1.カスタムフィールドの準備
ブログ記事で作ります。任意の更新日を記入するためのフィールドです。

名前:更新日
説明:記入方式 例:2008年8月1日15日10時5分→08/01/15/1005
必須?:チェックなし
種類:テキスト
規定値:なし
ベースネーム:entryupdate
テンプレートタグ:entryupdate

2.使い方
上の方法でフィールドを作ると、記事投稿画面に以下のフィールドが出てきます。

080823.gif

  • 記入例に従って、その記事の更新日を入れておきます。
  • 記入方式は好きな様式でいいですが、この日付がソートの対象になることを考えて決めます。また全記事同じ書き方になるようにします。
  • 中身のある更新を行った場合は更新日を現在の日時に書きかえます。
  • 誤字・脱字等、中身のない更新の場合は更新日はそのままにしておきます。

3.リストのコード

●サンプル1(4.2以降の場合)
4.2からはsort_byモディファイアに直接カスタムフィールドのベースネームを書いてソート出来るようになりました。ただし、試してみたところ、limitモディファイアとsort_by="field:ベースネーム"の組み合わせでは基本例のようには制御できないようです。そのため、__counter__変数で制御する方法でやってみました。赤字の部分で表示したい記事数を指定します。

<MTEntries lastn="0" sort_by="field:entryupdate">
<MTEntriesHeader><ul></MTEntriesHeader>
<MTIfNonEmpty tag="entryupdate">
<MTIf name="__counter__" le="10">
<li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
</MTIf>
</MTIfNonEmpty>
<MTEntriesFooter></ul></MTEntriesFooter>
</MTEntries>

ところで、この方法には1つネックが。どうもダイナミック・パブリッシングでsort_by="field:entryupdate"が上手く動作しませんorz。でも大丈夫。ダイナミックで使いたい派にはもう1つ方法があります。

●サンプル2(4.1以降&ダイナミックで使いたい場合)
こちらの応用編をもっとスッキリ修正したのが以下。全エントリーの中からカスタムフィールドの値が付けられている記事を対象にソートを行い、更新日順に並べます。赤字の部分に表示させたい記事数より1つ少ない数を指定します(10個並べたい場合は9とする)。出てくる結果はサンプル1と同じです。

<MTEntries lastn="0">
<MTIfNonEmpty tag="entryupdate">
<MTSetVarBlock name="update"><$MTentryupdate$></MTSetVarBlock>
<MTSetVarBlock name="upentry"><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></MTSetVarBlock>
<MTSethashVar name="uplist">
<MTSetVar name="$update" value="$upentry">
</MTSethashVar>
</MTIfNonEmpty>
</MTEntries>
 
<MTLoop name="uplist" sort_by="key reverse">
<MTSetVarBlock name="push(sortuplist)"><$MTVar name="__value__"$></MTSetVarBlock>
</MTLoop>
 
<ul>
<MTFor var="i" from="0" to="9">
<li><$MTVar name="sortuplist" index="$i"$></li>
</MTFor>
</ul>

お好きな方法で~。