TopMovable Typeカスタマイズカテゴリー > ブログ記事に同一カテゴリーのブログ記事の前後リンクを表示する
2008年3月21日

ブログ記事に同一カテゴリーのブログ記事の前後リンクを表示する

Posted at March 21,2008 2:55 AM
Category:[エントリー, カテゴリー]
Tag:[, , , , ]

Movable Type で、ブログ記事の前後のブログ記事へのリンクを、直近のブログ記事ではなく、同一カテゴリーのブログ記事を表示するカスタマイズです。

下の画面の、ブログ記事タイトル上にある前後リンクは、分かりにくいですが、同一カテゴリーのブログ記事です。

ブログ記事の前後のブログ記事へのリンクを同一カテゴリーに絞る

また、ブログ記事に複数カテゴリーを設定している場合は、すべてのカテゴリーの前後リンクも表示します(こんなに表示するのもどうかと思いますが...)。

ブログ記事の前後のブログ記事へのリンクを同一カテゴリーに絞る

以下、カスタマイズ方法です。

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対応のプラグインを作ってみました。

PreviousNextInCategory.zip

元プラグインをかなり改変してしまったので、上記のファイルをダウンロードしたら、元プラグインにある、

_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category

を埋め込んでください(複数カテゴリーに対応させる場合は4項のカスタマイズも行ってください)。
具体的な作業は、ダウンロードしたファイルの最後の方に簡単な説明を入れてますので、それを読んでください。

複数のカテゴリーを設定したブログ記事でも、前後リンクのブログ記事はすべて再構築されます。

なお、再構築は同じカテゴリーのブログ記事を検索するという、元記事のロジックをそのまま使わせてもらってますが、パフォーマンスの問題を解消する改善策がありましたらご教示ください。

6.参考記事

このエントリーは下記の記事を参考にさせていただきました。ありがとうございました。

Posted by yujiro
関連記事
人気エントリー
トラックバックURL


トラックバック

進め!MovableType4 カテゴリ前後リンク from 笑むなAikoの『お玉杓子は飲み物です』
世の中「あると便利なもの」は多いですが、これは「無いと不便なもの」。そんなプラグインです。 [続きを読む]

Tracked on March 23, 2008 7:04 AM
コメント

いつもお世話になっています。

以前から PreviousNextInCategory.plを使わせていただいていて、ブログ記事の再構築か全記事を保存しない限り、このリンクが中途半端に切れていたためとても不便に思っていました。

早速、試させていただきました。

昨日投稿した記事を保存しましたら、14日離れている同一カテゴリの前記事の前後リンクが更新されました。
有難うございます。本当に助かりました(^^)V。

ちなみに…

_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category

への追加ですが、

> :
>元プラグインの_hdlr_entry_previous_in_categoryを記述
> :

「:」も含めてカットし、この部分に挿入で構わないのですね?。私はカットしちゃいましたが動いてますので問題ないかと思いましたが、同じように戸惑う方もいらっしゃるかもと、質問させて頂きます。もう一点、オリジナルには[ 1;]が最終行にありませんが、これは残したままが宜しい訳ですね?。プラグインの中身まで詳しく分かりませんので、周知の質問でしたら済みません。

[1] Posted by aiko_m Author Profile Page : March 21, 2008 8:08 AM

この記事をエントリーしてくださってありがとうございます。
あらためて、感謝です。

前後の記事の再構築についてはよくわからなかったので、
ちょっと面倒でも、その都度再構築しようと思っていたので、
さらに助かります。
ほんとうにありがとうございます。

ただ、私も、

「元プラグインをかなり改変してしまったので、上記のファイルをダウンロードしたら元プラグインにある、

_hdlr_entry_previous_in_category
_hdlr_entry_next_in_category

を埋め込んでください(複数カテゴリーに対応させる場合は4項のカスタマイズも行ってください)。複数のカテゴリーを設定したブログ記事でも、前後リンクのブログ記事はすべて再構築されます。」

の部分がちゃんと理解できなくて…。

お忙しいところお手数をかけて申しわけないのですが、
もう少し具体的に説明していただけないでしょうか。

すみません。よろしくお願いします。

[2] Posted by saeko Author Profile Page : March 21, 2008 2:50 PM

saekoさん初めまして、私がコメントして良いのか分かりませんが、解凍された PreviousNextInCategory.pl
の以下の部分(2箇所あります)、


sub _hdlr_entry_previous_in_category {
:
元プラグインの_hdlr_entry_previous_in_categoryを記述
:
}

「元プラグインの_hdlr_entry_previous_in_categoryを記述」の場所に、オリジナルのPreviousNextInCategory.plからコピーした同じ部分を「{」「}」の間にペーストするだけです。私は前後の「:」も取っちゃいましたが、記事を拝見すると残しておくみたいですね。

その後、オリジナルと入れ替えFTPして元のフォルダに入れるだけでOKです。
もし既に「前後リンクへのカスタマイズ」がお済みで、複数カテゴリーを対象としないのでしたら、プラグインを入れ換えるだけで動作します。

[3] Posted by aiko_m Author Profile Page : March 22, 2008 1:54 AM

aiko_mさん、ありがとうございました。

無事、プラグインを設定できました!

はじめ、「:」を取り除かないままでFTPしたら、
「読み込みに失敗しました」というエラーが出てしまって、
今度はaiko_mさんと同じように「:」を取っちゃったら、
ちゃんと読み込んでくれました。

やっぱり「:」は要らないということでしょうか。

とにもかくにも、
前後の再構築の部分についてのカスタマイズは、
よくわからずに、「手動で再構築すればいいかな」なんてあきらめかけていたので、
ほんとうに助かりました。

yujiroさん、
aiko_mさん、
ありがとうございます!

[4] Posted by saeko Author Profile Page : March 22, 2008 6:56 PM

>aiko_mさん
>saekoさん
こんばんは。
ご指摘の箇所につきましては記述を修正いたしました(「:」は前後の行の省略を意味するつもりで書いたのですが、紛らわしいようなので削除しました)。
再度ご確認頂ければ幸いです。

とりあえずうまくできたようでよかったです。
それではよろしくお願い致します。

[5] Posted by yujiro Author Profile Page : March 22, 2008 9:58 PM
コメントする

*必須



お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Entry Trackbacks
進め!MovableType4 カテゴリ前後リンク
 [笑むなAikoの『お玉杓子は飲み物です』] 03/23 07:04
Entries of this Category
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!