ブログ記事に同一カテゴリーのブログ記事の前後リンクを表示する
Movable Type で、ブログ記事の前後のブログ記事へのリンクを、直近のブログ記事ではなく、同一カテゴリーのブログ記事を表示するカスタマイズです。
2008.11.18 Movable Type 4.2 対応の記事を公開しました。
下の画面の、ブログ記事タイトル上にある前後リンクは、分かりにくいですが、同一カテゴリーのブログ記事です。
また、ブログ記事に複数カテゴリーを設定している場合は、すべてのカテゴリーの前後リンクも表示します(こんなに表示するのもどうかと思いますが...)。
以下、カスタマイズ方法です。
1.プラグインのダウンロード
Previous and next in category のサイトに進み、「PreviousNextInCategory」のリンクをクリック。
2.プラグインのインストール
ダウンロードした PreviousNextInCategory.zip を解凍して、PreviousNextInCategory.pl をpluginsディレクトリにアップロードします。
ブログ管理画面より、「システムメニュー」→「プラグイン」で「PreviousNextInCategory.pl」が表示されればインストール完了です。
3.プライマリカテゴリーに属するブログ記事のみを表示する場合
ブログ記事アーカイブの任意の位置に下記のサブテンプレートを設定してください。
<MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink$>">« <$MTEntryTitle$></a> |
</MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink archive_type="Category"$>"><$MTEntryCategory$></a>
<MTEntryNextInCategory>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNextInCategory>
ブログ記事アーカイブを再構築すれば、冒頭のように、同一カテゴリーの前後記事リンクが表示されます。
4.ブログ記事に登録されているすべてのカテゴリーに属するブログ記事を表示する場合
PreviousNextInCategory.plを任意のエディタで開き、
:
sub _hdlr_entry_previous_in_category {
my($ctx, $args, $cond) = @_;
my $e = $ctx->stash('entry')
or return $ctx->_no_entry_error('MTEntryPrevious');
my $cat = $e->category
or return '';
my $prev = $e->previous(1);
:
sub _hdlr_entry_next_in_category {
my($ctx, $args, $cond) = @_;
my $e = $ctx->stash('entry')
or return $ctx->_no_entry_error('MTEntryNext');
my $cat = $e->category
or return '';
my $next = $e->next(1);
:
の部分に下記の青色の行を追加します。
:
sub _hdlr_entry_previous_in_category {
my($ctx, $args, $cond) = @_;
my $e = $ctx->stash('entry')
or return $ctx->_no_entry_error('MTEntryPrevious');
my $cat = $e->category
or return '';
if($ctx->stash('category') ne '') {
$cat = $ctx->stash('category');
}
my $prev = $e->previous(1);
:
sub _hdlr_entry_next_in_category {
my($ctx, $args, $cond) = @_;
my $e = $ctx->stash('entry')
or return $ctx->_no_entry_error('MTEntryNext');
my $cat = $e->category
or return '';
if($ctx->stash('category') ne '') {
$cat = $ctx->stash('category');
}
my $next = $e->next(1);
:
ブログ記事アーカイブの任意の位置に下記のサブテンプレートを設定してください。
<MTEntryCategories>
<p>
<MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink$>">« <$MTEntryTitle$></a> |
</MTEntryPreviousInCategory>
<a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>
<MTEntryNextInCategory>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNextInCategory>
</p>
</MTEntryCategories>
ブログ記事アーカイブを再構築すれば、ブログ記事が属する全カテゴリーの前後記事リンクが表示されます。
5.前後記事の再構築をする
上記の設定だけでは、ブログ記事投稿時に同一カテゴリーの前後記事が再構築されないという問題があります。
ということで、一応、MT4対応のプラグインを作ってみました。
元プラグインをかなり改変してしまったので、上記のファイルをダウンロードしたら、元プラグインにある、
_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category
を埋め込んでください(複数カテゴリーに対応させる場合は4項のカスタマイズも行ってください)。
具体的な作業は、ダウンロードしたファイルの最後の方に簡単な説明を入れてますので、それを読んでください。
複数のカテゴリーを設定したブログ記事でも、前後リンクのブログ記事はすべて再構築されます。
なお、再構築は同じカテゴリーのブログ記事を検索するという、元記事のロジックをそのまま使わせてもらってますが、パフォーマンスの問題を解消する改善策がありましたらご教示ください。
6.参考記事
このエントリーは下記の記事を参考にさせていただきました。ありがとうございました。
- Movable Type6で記事のない親カテゴリのカテゴリページを出力する方法
- Movable Typeでブログ記事が属するカテゴリアーカイブのリンクをブログ記事ページに表示する
- Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法
- Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する
- Movable Typeのカテゴリのベースネームについて
- Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法
- Movable TypeのMTIfCategoryタグとMTEntryIfCategoryタグの違い
- Movable Typeのカテゴリリストで階層別に背景画像を変更する
- Movable Typeのカテゴリ・フォルダで特定の最上位階層を表示しない方法
- Movable Typeのカテゴリリストにダミーの親カテゴリを表示する
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
≫ 進め!MovableType4 カテゴリ前後リンク from 笑むなAikoの『お玉杓子は飲み物です』
世の中「あると便利なもの」は多いですが、これは「無いと不便なもの」。そんなプラグインです。 [続きを読む]
≫ MTで同一カテゴリーの前後のエントリー(記事)を表示する from CSS Lecture
Movable Type で、ブログ記事の前後へのリンクはプラグインは必要ないのですが、同一カテゴリーのブログ記事を表示するには今回紹介するPreviou... [続きを読む]
いつもお世話になっています。
以前から PreviousNextInCategory.plを使わせていただいていて、ブログ記事の再構築か全記事を保存しない限り、このリンクが中途半端に切れていたためとても不便に思っていました。
早速、試させていただきました。
昨日投稿した記事を保存しましたら、14日離れている同一カテゴリの前記事の前後リンクが更新されました。
有難うございます。本当に助かりました(^^)V。
ちなみに…
_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category
への追加ですが、
> :
>元プラグインの_hdlr_entry_previous_in_categoryを記述
> :
「:」も含めてカットし、この部分に挿入で構わないのですね?。私はカットしちゃいましたが動いてますので問題ないかと思いましたが、同じように戸惑う方もいらっしゃるかもと、質問させて頂きます。もう一点、オリジナルには[ 1;]が最終行にありませんが、これは残したままが宜しい訳ですね?。プラグインの中身まで詳しく分かりませんので、周知の質問でしたら済みません。
この記事をエントリーしてくださってありがとうございます。
あらためて、感謝です。
前後の記事の再構築についてはよくわからなかったので、
ちょっと面倒でも、その都度再構築しようと思っていたので、
さらに助かります。
ほんとうにありがとうございます。
ただ、私も、
「元プラグインをかなり改変してしまったので、上記のファイルをダウンロードしたら元プラグインにある、
_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category
を埋め込んでください(複数カテゴリーに対応させる場合は4項のカスタマイズも行ってください)。複数のカテゴリーを設定したブログ記事でも、前後リンクのブログ記事はすべて再構築されます。」
の部分がちゃんと理解できなくて…。
お忙しいところお手数をかけて申しわけないのですが、
もう少し具体的に説明していただけないでしょうか。
すみません。よろしくお願いします。
saekoさん初めまして、私がコメントして良いのか分かりませんが、解凍された PreviousNextInCategory.pl
の以下の部分(2箇所あります)、
sub _hdlr_entry_previous_in_category {
:
元プラグインの_hdlr_entry_previous_in_categoryを記述
:
}
「元プラグインの_hdlr_entry_previous_in_categoryを記述」の場所に、オリジナルのPreviousNextInCategory.plからコピーした同じ部分を「{」「}」の間にペーストするだけです。私は前後の「:」も取っちゃいましたが、記事を拝見すると残しておくみたいですね。
その後、オリジナルと入れ替えFTPして元のフォルダに入れるだけでOKです。
もし既に「前後リンクへのカスタマイズ」がお済みで、複数カテゴリーを対象としないのでしたら、プラグインを入れ換えるだけで動作します。
aiko_mさん、ありがとうございました。
無事、プラグインを設定できました!
はじめ、「:」を取り除かないままでFTPしたら、
「読み込みに失敗しました」というエラーが出てしまって、
今度はaiko_mさんと同じように「:」を取っちゃったら、
ちゃんと読み込んでくれました。
やっぱり「:」は要らないということでしょうか。
とにもかくにも、
前後の再構築の部分についてのカスタマイズは、
よくわからずに、「手動で再構築すればいいかな」なんてあきらめかけていたので、
ほんとうに助かりました。
yujiroさん、
aiko_mさん、
ありがとうございます!
>aiko_mさん
>saekoさん
こんばんは。
ご指摘の箇所につきましては記述を修正いたしました(「:」は前後の行の省略を意味するつもりで書いたのですが、紛らわしいようなので削除しました)。
再度ご確認頂ければ幸いです。
とりあえずうまくできたようでよかったです。
それではよろしくお願い致します。
はじめまして。
現在MovableType4.1を使っているのですが、
MTEntryPreviousInCategoryなどの、
MTEntry~のタグを使おうとすると、必ずコンテキスト外で使っていないか、とエラーになってしまいます。
これは仕様なのでしょうか、もしくはテンプレートの挿入位置になにか問題があるのでしょうか。
お忙しいところ、お手数をおかけして申し訳ありませんが、どうか教えていただけないでしょうか。よろしくお願いいたします。
>haruさん
こんにちは。
ご返事遅くなってすいません。
ご質問の件ですが、エラーからはテンプレートの挿入位置に問題があるように思われます。
どのテンプレートでどのようなサブテンプレートをお使いかお知らせください。
それではよろしくお願いいたします。