「カテゴリ/フォルダ/ブログ記事/ウェブページを並べ替えるプラグイン」の第5回目として、並び順で前後にあるカテゴリ/フォルダ/ブログ記事/ウェブページを出力するテンプレートタグを解説します。
1.MTSortedEntryPrevious/MTSortedEntryNextタグ
現在のブログ記事の前(Previous)/次(Next)のブログ記事を出力するブロックタグです。
MT標準のMTEntryPrevious/MTEntryNextタグの代わりに使います。
MTEntries系タグのブロックの中や、ブログ記事アーカイブテンプレートの中で使うことができます。
また、ブロックの中では、MTEntry系のタグを使うことができます。
出力されるブログ記事は以下のようになります。
| 条件 | 出力されるブログ記事 |
|---|---|
| ブログ記事がどのカテゴリにも属していない場合 | どのカテゴリにも属さないブログ記事の中で、前後のブログ記事 |
| ブログ記事がカテゴリに属している場合 | そのブログ記事の主カテゴリと同一のカテゴリに属する前後のブログ記事 |
| ブログ記事がカテゴリに属していて、かつMTEntryCategoriesタグのブロックの中でタグを使う場合 | ブログ記事が属する個々のカテゴリでの、同一カテゴリの前後のブログ記事 たとえば、ブログ記事がカテゴリAとBに属している場合、カテゴリAの前後の記事と、カテゴリBの前後の記事を出力することができます。 |
たとえば、ブログ記事アーカイブテンプレートに以下のようなタグを入れると、前後のページへのリンクを出力することができます。
<MTSortedEntryPrevious>
<p>前のブログ記事は「<a href="<$MTEntryPermalink$>"><$MTEntryTitle remove_html="1"$></a>」です。</p>
</MTSortedEntryPrevious>
<MTSortedEntryNext>
<p>次のブログ記事は「<a href="<$MTEntryPermalink$>"><$MTEntryTitle remove_html="1"$></a>」です。</p>
</MTSortedEntryNext>
1.MTSortedPagePrevious/MTSortedPageNextタグ
MTSortedEntryPrevious/MTSortedEntryNextタグのウェブページ版で、現在のウェブページの前(Previous)/次(Next)のウェブページを出力するブロックタグです。
MT標準のMTPagePrevious/MTPageNextタグの代わりに使います。
MTPages系タグのブロックの中や、ウェブページアーカイブテンプレートの中で使うことができます。
また、ブロックの中では、MTPage系のタグを使うことができます。
出力されるブログ記事は以下のようになります。
| 条件 | 出力されるウェブページ |
|---|---|
| ウェブページがどのフォルダにも属していない場合 | どのフォルダにも属さないウェブページの中で、前後のウェブページ |
| ウェブページがフォルダに属している場合 | そのウェブページと同一のフォルダに属する前後のウェブページ |
3.MTSortedCategoryPrevious/MTSortedCategoryNextタグ
現在のカテゴリの前(Previous)/次(Next)のカテゴリを出力するブロックタグです。
MT標準のMTCategoryPrevious/MTCategoryNextタグの代わりに使います。
MTCategories系タグのブロックの中や、カテゴリアーカイブテンプレートの中で使うことができます。
また、ブロックの中では、MTCategory系のタグを使うことができます。
モディファイアを指定しない場合、前後のカテゴリであっても、ブログ記事がないカテゴリはスキップされ、さらにその前後のカテゴリが出力されます。
一方、「no_skip="1"」のモディファイアを付けると、ブログ記事があるかどうかにかかわらず、前後のカテゴリが出力されます。
たとえば、カテゴリアーカイブテンプレートに以下のようなタグを入れると、前後のカテゴリ(ただし、記事があるカテゴリ)へのリンクを出力することができます。
<MTSortedCategoryPrevious>
<p>前のカテゴリは<a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>です。</p>
</MTSortedCategoryPrevious>
<MTSortedCategoryNext>
<p>次のカテゴリは<a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>です。</p>
</MTSortedCategoryNext>
また、上の例でMTSortedCategoryPrevious/MTSortedCategoriNextタグに「no_skip="1"」のモディファイアをつけると、記事のあるなしにかかわらず、前後のカテゴリへのリンクが出力されます。
4.MTSortedFolderPrevious/MTSortedFolderNextタグ
現在のフォルダの前(Previous)/次(Next)のフォルダを出力するブロックタグです。
MTSortedCategoryPrevious/MTSortedCategoriNextタグと同様に、「no_skip="1"」のモディファイアを指定することもできます。






![Hardcore Will Never Die, But You Will [Bonus Tracks] Hardcore Will Never Die, But You Will [Bonus Tracks]](http://userserve-ak.last.fm/serve/34s/67192634.jpg)



コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
同じカテゴリーの最初のエントリーや最後のエントリー、
可能なら指定した順番のエントリーへのリンクを張りたいのですが、
そのようなことは可能でしょうか?
>たまさん
こんにちは。
今後のバージョンアップの際に、MTSortedEntriesタグにoffsetやlastnのモディファイアの機能を付ける予定です。
これを使えば、ご希望のようなことが可能になります。
なお、ブログ記事と同一のカテゴリの記事を一覧で出力する機能は、すでにあります。
http://www.h-fj.com/blog/archives/2008/11/06-092255.php
同じカテゴリーの最初のエントリーや最後のエントリー、
可能なら指定した順番のエントリーへのリンクを張りたいのですが、
そのようなことは可能でしょうか?
以下のタグでMTSortedEntryPreviousとMTSortedEntryNext内の
タグが一切表示されないのですが、
どのように指定すべきなのでしょうか。
<MTSortedEntryCategories>
<MTSortedEntryPrevious><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle remove_html="1"$>">Prev</a></MTSortedEntryPrevious>
<span class="current"><$MTEntryTitle$></span>
<MTSortedEntryNext><a href="<$MTEntryPermalink$>" title="<$MTEntryTitle remove_html="1"$>">Next</a></MTSortedEntryNext>
</MTSortedEntryCategories>
>よたろさん
こんにちは。
おそらく、ブログ記事の並び順の初期化を行っていないのではないかと思います。
以下のページを参照のうえ、ブログ記事の並び順を初期化してください。
http://www.h-fj.com/blog/archives/2008/10/21-102010.php
初期化したらうまくできました。
ありがとうございました。
MT4.261です。
MTSortedEntryPrevious、MTSortedEntryNextタグを使うと、記事作成画面で「確認」ボタンを押すと「Can't call method "order_number" on an undefined valueエラー」が出ます。
記事にカテゴリーを指定しないか、一度記事を保存するとエラーは出なくなります。
保存すればよい話なのですが、ちょっと気持ち悪いので、簡単に直るようであれば、対策法を教えていただければと思います。
>かん吉さん
こんにちは。
MT_DIR/plugins/SuperSort/lib/Util.pmの53行目を、以下のように変えてください。
なお、「category_id => $cat->id });」の後の「;」を削除することにご注意ください。
書き換え前
my $place = MT::Placement->load({ entry_id => $entry->id, category_id => $cat->id });書き換え後
my $place = MT::Placement->load({ entry_id => $entry->id, category_id => $cat->id }) or return;教えていただいた対策をした結果、エラーが出なくなりました!
ありがとうございました!
これからも便利なプラグインを開発してください。