同じカテゴリーの前後リンクを作成する
2009年2月 1日 14:24 | コメント (0) | トラックバック (0)
構造
- <MTEntries category="xxxx"> を使い、表示中の記事と同じカテゴリーの記事データ(タイトルとリンク)を、通し番号をつけて配列に入力
- 上記 MTEntries をループ中、表示中の記事にやってきたら、その通し番号の前後を「前の記事番号」「次の記事番号」としてメモ
- メモを参照して前の記事 / 次の記事を表示
<MTEntryID setvar="c_ent">
<MTEntryCategory setvar="c_cat">
<MTIfNonZero name="c_cat">
<MTEntries category="$c_cat">
<MTSetVar name="ent_num" value="1" op="+">
<MTEntryID setvar="d_ent">
<MTSetVarBlock name="ent_data[$ent_num]" value="$ent_num">
<a href="<MTEntryPermalink>"><MTEntryTitle remove_html="1"></a>
</MTSetVarBlock>
<MTIf name="d_ent" eq="$c_ent">
<MTGetVar name="ent_num" value="1" op="-" setvar="prev_ent">
<MTGetVar name="ent_num" value="1" op="+" setvar="next_ent">
</MTIf>
</MTEntries>
<MTGetVar name="ent_data[$prev_ent]" setvar="p_ent">
<MTGetVar name="ent_data[$next_ent]" setvar="n_ent">
<MTElse>
<MTEntryPrevious>
<MTSetVarBlock name="p_ent">
<a href="<MTEntryPermalink>"><MTEntryTitle></a>
</MTSetVarBlock>
</MTEntryPrevious>
<MTEntryNext>
<MTSetVarBlock name="n_ent">
<a href="<MTEntryPermalink>"><MTEntryTitle></a>
</MTSetVarBlock>
</MTEntryNext>
</MTIfNonZero>
<MTIfNonZero name="p_ent">
<p>前の記事:<MTGetVar name="p_ent"></p>
</MTIfNonZero>
<MTIfNonZero name="n_ent">
<p>次の記事:<MTGetVar name="n_ent"></p>
</MTIfNonZero>
個別解説
7 〜 9行目
<MTSetVarBlock name="ent_data[$ent_num]" value="$ent_num">
<a href="<MTEntryPermalink>"><MTEntryTitle></a>
</MTSetVarBlock>
5行目で設定した、ループのたびに1増加させている変数 ent_num を使い、配列 ent_data[ent_num] にエントリーのデータを入力
10 〜 13行目
<MTIf name="d_ent" eq="$c_ent">
<MTGetVar name="ent_num" value="1" op="-" setvar="prev_entr">
<MTGetVar name="ent_num" value="1" op="+" setvar="next_entr">
</MTIf>
表示中の記事の ID「c_ent」と、データ取得時の ID「d_ent」を比較して、等しければ、現在の ent_num から1引いたものを prev_ent に、1足したものを next_ent に入力。
15・16行目
<MTGetVar name="ent_data[$prev_ent]" setvar="p_ent">
<MTGetVar name="ent_data[$next_ent]" setvar="n_ent">
表示用に p_ent / n_ent にデータを移し替える。これは MTIfNonZero では配列変数の有無を判別できない・カテゴリー指定が無い場合のデータも共通のパーツで出力したい、という2つの理由から。
3行目・17 〜 27行目
<MTIfNonZero name="c_cat">
・
・
・
<MTElse>
<MTEntryPrevious>
<MTSetVarBlock name="p_ent">
<a href="<MTEntryPermalink>"><MTEntryTitle></a>
</MTSetVarBlock>
</MTEntryPrevious>
<MTEntryNext>
<MTSetVarBlock name="n_ent">
<a href="<MTEntryPermalink>"><MTEntryTitle></a>
</MTSetVarBlock>
</MTEntryNext>
表示中の記事にカテゴリーが指定されていない場合は、17 〜 27 行目で MTEntryPrevious と MTEntryNext により通常の方法で各データを p_ent / n_ent に入力
28 〜 33行目
<MTIfNonZero name="p_ent">
<p>前の記事:<MTGetVar name="p_ent"></p>
</MTIfNonZero>
<MTIfNonZero name="n_ent">
<p>次の記事:<MTGetVar name="n_ent"></p>
</MTIfNonZero>
MTIfNonZero で中身があるかどうかをチェックして出力。
コメント(0)
トラックバック(0)
トラックバックURL : http://www.studio-ponytail.com/mt/mt-tb.cgi/148
コメントを投稿する
コメントの投稿には JavaScript が必要です。
ブラウザの JavaScript 機能を有効にしてください。
投稿ボタンを押してもエラーになりますのでご注意ください。