top

MTArchiveListでoffsetを使う(のと同じ効果)

ちょっと思いついたので覚え書き。<MTEntries>なら例えば<MTEntries lastn="10" offset="2">で、最新から2件を除いた10件分の記事リストを作ることが出来ます。では、<MTArchiveList>で同じことは可能なのでしょうか?

MTの仕様から言うと「出来ません」ということになります。<MTArchiveList>にはoffsetモディファイアがないからです。
しかし! 実はこれが出来てしまうんです、ダイナミックなら。MTのダイナミック・パブリッシングはSmartyで動いており、Smartyではoffsetが機能します。故に、MT側でoffsetが設定されてなければSmartyのoffsetが働き、結果として以下のタグで期待通りに動作してしまいます(^^;。

■ダイナミックで最新の○件を除いた×件のアーカイブリストを表示させる

<ul>
<MTArchiveList archive_type="Monthly" lastn="6" offset="2">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
</MTArchiveList>
</ul>

ちゃんと最新から2件を除いた6件の月アーカイブが出力されます。ダイナミック、便利~。
ダイナミックならどのバージョンでも使えます。

ではSmartyの恩恵にあずかれない静的生成はどうしたら? MT4は変数が豊富に揃ってるので工夫すれば似たようなことは可能です。以下、それも覚え書き。

■最新の○件を除いた×件のアーカイブリストを表示させる(静・動OK)

<MTArchiveList archive_type="Monthly">
<MTSetVarBlock name="push(month)"><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></MTSetVarBlock>
</MTArchiveList>
<ul>
<MTFor var="i" from="2" to="7">
<li><$MTVar name="month" index="$i"$></li>
</MTFor>
</ul>

<MTFor>のfromとtoで何件から何件までの月アーカイブを出すか設定できます。赤字の部分に「最新から除きたい件数」を指定。青字部分に「表示させたい数より1つ多い数字」を指定します。この例だと最新2件を除く6件のリストになります。実際に出力させて調整した方が分かりやすいかもなので、いろいろ試してみるといいかと。
静・動両方で動作確認済み。4.1以降用です。

☆この手の方法はいくらでもパターンが考えられると思うのですが、タグの組み方によってはダイナミックで上手く動作しないものもあるので、実際に動かしてみて、ダイナミックで問題ないものを選んで覚え書きしています。

■おまけ:1つ前のアーカイブを表示させる
表示させたい(リンクを張りたい)のが1つ前のアーカイブだけ、という場合は上のような複雑なことをしなくても、<MTArchivePrevious>だけでいけるので、それもついでに。

<MTArchiveList archive_type="Monthly" lastn="1">
<MTArchivePrevious>
<a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a>
</MTArchivePrevious>
</MTArchiveList>

必要に応じてMonthlyを書き換えれば1つ前の年、1つ前の週とかにも。

<2008.6.11>おまけ追加