2009-07-24
■[Movable Type] 個別エントリー記事からブログを横断して時系列前後のエントリーへのリンク
Movable Typeでサイトつくる時って、だいたいコンテンツごとにブログをたてる。
レアケースだと思うんだけど、
個別エントリー記事からブログをまたいで時系列での前後のエントリーへのリンク欲しいみたいな話があり。
(mt:EntryPrev、mt:EntryNextをmt:MutiBlog環境でやりたい)
ちゃんと動いたけど、たぶんものすごく無理矢理。もっと省略できそうだし。
流れ
- 複数ブログの全エントリーIDを配列に格納
- 現ページのエントリーIDと1.の配列を比較して、配列上の前後のエントリーのIDを抽出。
- mt:Entries id="" blog_ids=""でそのIDに該当するエントリーのタイトルとパーマリンクをとってくる。
<mt:SetVarBlock name="blog_ids">*カンマ区切りでまたぎたいブログIDを指定</mt:SetVarBlock> <mt:Ignore>1. 複数ブログ記事のmt:EntryIDを配列EntryIDsに格納、$blog_idにはカンマ区切りでマージしたいブログIDを指定</mt:Ignore> <mt:SetVar name="id" value="0"> <mt:Entries lastn="0" blog_ids="$blog_ids"> <mt:SetVarBlock name="EntryIDs" index="$id"><$mt:EntryID$></mt:SetVarBlock> <mt:SetVarBlock name="id"><$mt:GetVar name="id" value="$id" op="++"$></mt:SetVarBlock> </mt:Entries> <mt:Ignore>2. この個別ページのmt:EntryID、1. のEntryIDsから要素数、最新のエントリーのmt:EntryID、最古のエントリーのmt:EntryID(コレ使わないけど)を取得</mt:Ignore> <mt:SetVarBlock name="thisID"><$mt:EntryID$></mt:SetVarBlock> <mt:SetVarBlock name="latestID"><$mt:GetVar name="EntryIDs[0]"$></mt:SetVarBlock> <mt:SetVarBlock name="EntryID_number"><$mt:GetVar name="count(EntryIDs)" op="-" value="1"$></mt:SetVarBlock> <mt:SetVarBlock name="oldestID"><$mt:GetVar name="entryID[$entryID_number]"$></mt:SetVarBlock> <mt:Ignore>3. for文をつかって、$thisIDと配列内の要素を比較。一致したら$thisCountにそのインデックス値を代入</mt:Ignore> <mt:for var="x" from="0" to="$EntryID_number"> <mt:SetVarBlock name="id"><$mt:GetVar name="EntryIDs[$x]"$></mt:SetVarBlock> <mt:If name="thisID" eq="$id"> <mt:SetVarBlock name="thisCount"><$mt:GetVar name="x"$></mt:SetVarBlock> </mt:If> <mt:Ignore>//確認用:<$mt:GetVar name="x"$>:<$mt:GetVar name="EntryIDs[$x]"$>,</mt:Ignore> </mt:for> <mt:Ignore>4. 3.の$thisCount基準に、前後のインデックス値を取得(前:$prevCount、後:nextCount)</mt:Ignore> <mt:SetVarBlock name="prevCount"><$mt:GetVar name="thisCount" value="1" op="+"$></mt:SetVarBlock> <mt:SetVarBlock name="nextCount"><$mt:GetVar name="thisCount" value="1" op="-"$></mt:SetVarBlock> <mt:Ignore>5. 前後のインデックス値の要素を取得(前:$prevID、後:$nextID)</mt:Ignore> <mt:SetVarBlock name="prevID"><$mt:GetVar name="EntryIDs[$prevCount]"$></mt:SetVarBlock> <mt:SetVarBlock name="nextID"><$mt:GetVar name="EntryIDs[$nextCount]"$></mt:SetVarBlock> <mt:Ignore>6. $prevID、$nextIDでもって$prevLinkと$nextLinkに前後のタイトルとリンクを代入</mt:Ignore> <mt:Ignore>//最古のページなら$prevLinkは定義しない</mt:Ignore> <mt:If name="thisCount" ne="$EntryID_number"> <mt:SetVarBlock name="prevLink"> <mt:Entries id="$prevID" blog_ids="$blog_ids"><a href="<$mt:EntryPermalink$>">[前]← <$mt:EntryTitle$></a></mt:Entries> </mt:SetVarBlock> </mt:If> <mt:Ignore>//最新のページなら$nextLinkは定義しない</mt:Ignore> <mt:If name="thisCount" ne="0"> <mt:SetVarBlock name="nextLink"> <mt:Entries id="$nextID" blog_ids="$blog_ids"><a href="<$mt:EntryPermalink$>">[次]→ <$mt:EntryTitle$></a></mt:Entries> </mt:SetVarBlock> </mt:If>
あとは、好きな位置で
<$mt:GetVar name="prevLink"$> <$mt:GetVar name="nextLink"$>
で前後のリンクを出力させる。
トラックバック - http://d.hatena.ne.jp/fujimori1981/20090724/1248368665
リンク元
- 10 http://811022.info/2009/07/23/
- 3 http://811022.info/
- 3 http://d.hatena.ne.jp
- 2 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=i24&q=MT コメント ナンバリング&btnG=検索&lr=lang_ja
- 1 http://74.125.153.132/search?q=cache:CNhJsB-2fO4J:d.hatena.ne.jp/fujimori1981/20090723+<mt:ignore>カスタムインデックス</mt:ignore>&cd=1&hl=ja&ct=clnk&gl=jp&lr=lang_ja&client=fir
- 1 http://d.hatena.ne.jp/diarylist?of=100&mode=rss&type=public
- 1 http://d.hatena.ne.jp/fujimori1981
- 1 http://d.hatena.ne.jp/perlcodesample/edit?date=20090719
- 1 http://delicious.com/network/52sec
- 1 http://delicious.com/network/moxuse?page=2