top

同一カテゴリー内での前後エントリーへのリンク(3)改 MT4.0~

先日、MTタグだけで同一カテゴリー内での前後エントリーへのリンクをやりましたが、opモディファイアを使わなくていい方法も思いついたので、それも覚え書きしておきます。使っている変数タグも<MTSetVar><MTSetVarBlock><MTIf><MTUnless>だけなので、4.0から使えるはずです。

<MTSetVarBlock name="thisdate"><$MTEntryDate format="%Y%m%d%H%M%S"$></MTSetVarBlock>
<MTSetVarBlock name="ecat"><$MTEntryCategory$></MTSetVarBlock>

<MTEntries category="$ecat">
<MTUnless name="prev">
<MTSetVarBlock name="prevdate"><$MTEntryDate format="%Y%m%d%H%M%S"$></MTSetVarBlock>
<MTIf name="prevdate" lt="$thisdate">
<a href="<$MTEntryPermalink$>">&laquo; <$MTEntryTitle$></a>
<MTSetVar name="prev" value="1">
</MTIf>
</MTUnless>
</MTEntries>
|
<MTEntries category="$ecat" sort_order="ascend">
<MTUnless name="next">
<MTSetVarBlock name="nextdate"><$MTEntryDate format="%Y%m%d%H%M%S"$></MTSetVarBlock>
<MTIf name="nextdate" gt="$thisdate">
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$> &raquo;</a>
<MTSetVar name="next" value="1">
</MTIf>
</MTUnless>
</MTEntries>

これも考え方はシンプルです。まず該当記事の投稿日時と主カテゴリを取得しておきます。
「前のリンク」では、該当記事の属するカテゴリ記事一覧から、該当記事より以前に書かれた最初の記事(=該当記事の同じカテゴリ内の1つ前の記事)が出力された時点でprevという変数をセットします。そのため2番目以降の記事は<MTUnless name="prev">に引っ掛かって処理の対象外になります。つまり、最初の記事が出力された時点で処理をストップさせるという仕組みになっています。
「次のリンク」も同様です。sort_order="ascend"をつけて記事を昇順にし、該当記事より後に書かれた最初の記事(=該当記事の同じカテゴリ内の1つ次の記事)が出力された時点で処理をストップします。

最初の1つだけ表示出来ればいいのなら、わざわざカウントしなくてもこういう方法でもいけますね。工夫や発想次第でいろいろな方法が考えられそうです。

バリエーション:他にこんな方法もあります。
同一カテゴリー内での前後エントリーへのリンク(4) offset版
同一カテゴリー内での前後エントリーへのリンク(2) MT4.1~

<2008.7.10>バリエーションを追加。
<2008.7.13>静的で正しく表示されなかったのを修正(^^;。