Movable Type 備忘録

 同一カテゴリ内の前・次リンク表示

こんばんわ^^

以前、こちらのハッシュ変数を使って同一カテゴリ内の前・次リンク表示で、同一カテゴリ内の前・次リンクの表示についてご紹介しました。

デメリットとしては前後のリンクを表示するのに 2 回ループする必要があったため再構築に時間がかかってしまいます。
今回は配列を使って該当するエントリを見つけたら、その前後のインデックスから前・次リンクを表示するよう改良してみましたのでご紹介 (●>∀<●)/

カスタマイズ

たとえば、Tips( 小技 )カテゴリ内の特定の親カテゴリに属するエントリのみ一覧表示の前後のエントリページのリンクを以下に表示してみます。

上記は以下のようなタグをブログ記事アーカイブ、または MTEntries ブロックタグ内で使用することで前・次リンクを表示することができます。

同一カテゴリ内の前・次リンク

  1. <mt:IfNonEmpty tag="EntryCategory">
  2.     <$MTEntryCategory setvar="entcat"$>
  3.     <$MTEntryDate format="%Y%m%d%H%M%S" setvar="curdate"$>
  4.  
  5.     <$mt:SetVar name="entall" value="0"$>
  6.     <MTEntries category="$entcat">
  7.         <mt:SetVarBlock name="entdate[$entall]"><$MTEntryDate format="%Y%m%d%H%M%S"$></mt:SetVarBlock>
  8.         <mt:SetVarBlock name="entname[$entall]"><$MTEntryTitle$></mt:SetVarBlock>
  9.         <mt:SetVarBlock name="entlink[$entall]"><$MTEntryPermalink$></mt:SetVarBlock>
  10.         <$mt:SetVar name="entall" value="1" op="+"$>
  11.     </MTEntries>
  12.  
  13.     <ul>
  14.     <mt:For var="x" from="0" to="$entall" increment="1">
  15.         <mt:If name="entdate[$x]" eq="$curdate">
  16.             <mt:SetVarBlock name="idx"><$mt:GetVar name="x" value="1" op="+"$></mt:SetVarBlock>
  17.             <mt:If name="idx" lt="$entall">
  18.                 <li class="list_entry">Prev Page: <a href="<mt:GetVar name="entlink[$idx]">" title="前のエントリ"><mt:GetVar name="entname[$idx]"></a></li>
  19.             </mt:If>
  20.  
  21.             <mt:SetVarBlock name="idx"><$mt:GetVar name="x" value="1" op="-"$></mt:SetVarBlock>
  22.             <mt:If name="idx" ge="0">
  23.                 <li class="list_entry">Next Page: <a href="<mt:GetVar name="entlink[$idx]">" title="次のエントリ"><mt:GetVar name="entname[$idx]"></a></li>
  24.             </mt:If>
  25.             <mt:SetVar name="x" value="$entall">
  26.         </mt:If>
  27.     </mt:For>
  28.     </ul>
  29. <mt:Else>
  30.     <ul>
  31.     <MTEntryPrevious><li class="list_entry">Prev Page: <a href="<$MTEntryPermalink$>" title="前のエントリ"><$MTEntryTitle encode_html="1"$></a></li></MTEntryPrevious>
  32.     <MTEntryNext><li class="list_entry">Next Page: <a href="<$MTEntryPermalink$>" title="次のエントリ"><$MTEntryTitle encode_html="1"$></a></li></MTEntryNext>
  33.     </ul>
  34. </mt:IfNonEmpty>

まず青字の部分では、該当エントリのプライマリカテゴリ、投稿日を取得して、取得したプライマリカテゴリでフィルタしたエントリの、投稿日、エントリ名、エントリの URL の配列を作ってます。

そして、赤字の部分で投稿日の配列を順次チェックして、同一日付=該当エントリの日付だった場合、その前後のインデックスを前リンク、次リンクとして表示してます。

緑字の部分はエントリが特定のカテゴリに属さない場合、通常の投稿順による前・次リンクを表示させています。

以上です。
よかったら使ってみてください (●´∀`●)

 Trackback Pings(0)

No trackbacks found.

 Comments(2)

#1: Posted by ぴぴ @ October 6, 2008 [REPLY]
user-pic

質問があります。
<mt:Else>で、カテゴライズされていない記事に対する部分ですが、これって<ul>と</ul>は忘れているのでしょうか? それとも実際にこれで<ul>の中に入るのでしょうか? とても初心者の質問ですみません。参考にさせてもらい、勉強になります。

#2: Posted by Author Profile Page bzbellからぴぴへの返信 @ October 6, 2008 [REPLY]
user-pic

>>1 ぴぴ さん

こんにちわ^^

あちゃキャハハ
忘れてますねあせあせ
ご指摘ありがとございますもじもじ

 Post a Comment

 

コメント用フィード