[BLOG] 同一カテゴリの前後の記事へのリンクを表示と自動再構築

 日記の個別ページには標準のテンプレートで前後の記事へのリンクが設定されているが、カテゴリによって全く別のテーマを扱っているので、表示される記事タイトルに違和感をおぼえることも多い。例えば、「[美食] スイーツ:グラマシーニューヨークのチーズケーキ」の前の記事は「[家族] 手作りおもちゃ」で、次の記事は「[読書] プロフェッショナル・プレゼンテーション」という具合。より関連の深い記事へのリンクが表示されるほうが、訪れた人がより興味をもっていただけるだろうと思い、同一カテゴリー内の前後の記事へのリンクを表示するようにしてみた。また、前後1つの記事だけでなく、前後3つの記事へのリンクを表示して興味のある記事をどんどん手繰ってもらえるようにしてみた。

 これを実現するために、nlog(n): 同一カテゴリの前後ナビゲーションと自動再構築と、アフィリエイトは我が魂に及び: MTカスタマイズ:同一カテゴリーの前後記事を個別ページに表示を参考にさせていただいた。
 「nlog(n): 同一カテゴリの前後ナビゲーションと自動再構築」からは、

  • MT Plugin Directory: PreviousNextInCategoryのPreviousNextInCategory プラグインを使うこと
  • PreviousNextInCategory プラグインを変更して複数カテゴリの記事の問題を解消すること
  • MT.pmを変更してEntryの新規作成時に過去と未来の同一カテゴリの記事を自動再構成すること
を参考にさせていただいた。
 「アフィリエイトは我が魂に及び: MTカスタマイズ:同一カテゴリーの前後記事を個別ページに表示」からは
  • 前後の記事へのリンクの表現方法
  • Again Pluginを使って前後3つの記事へのリンクを表示する方法
について参考にさせていただいた。

 なお、Again Pluginを公開していたサイトが閉鎖されてしまったため、Again Pluginを譲ってほしいというコメントをいただくようになった。プラグインの作者の意思に沿うことなのかわからないが、コメントをいただいてメールで送る、という手順を続けるのであれば同じことだと考え、暫定でHiLOGで公開させていただくことにする。
Again Pluginをダウンロード

 実施したのは以下のとおり。
(1)PreviousNextInCategory変更版のインストール

  • phil ringnalda dot com: Previous and next in categoryからPreviousNextInCategoryプラグインをダウンロードし解凍する
  • PreviousNextInCategory.plをテキストエディタで変更し、sub _hdlr_entry_previous_in_categoryとsub _hdlr_entry_next_in_categoryの2つのサブルーチン内の
    「my $cat = $e->category or return '';」と「my $prev = $e->previous(1);」の間に「if ($ctx->stash('category') ne '') {$cat = $ctx->stash('category');}」を追加する
  • [MT]/pluginsに変更したPreviousNextInCategory.plをアップロードする(属性705)

(2)individual archive templateにコードを追加
 テンプレートの好みの箇所に以下のコードを追加・保存し、リビルドする。

<MTEntryCategories>
    <br />■<a href="<$MTCategoryArchiveLink$>">[<$MTCategoryLabel$>]</a>内の前後の記事<br />
 <MTAgain limit="3">
  <MTEntryNextInCategory>
   <$MTAgainHere$>
   ↑ <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
  </MTEntryNextInCategory>
 </MTAgain>

 → <$MTEntryTitle$><br />

 <MTAgain limit="3">
  <MTEntryPreviousInCategory>
   ↓ <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br />
   <$MTAgainHere$>
  </MTEntryPreviousInCategory>
 </MTAgain>
</MTEntryCategories>

(3)MT.pmの変更
 [MT]/lib/MT.pmをダウンロードしテキストエディタで「return 1 unless $param{BuildDependencies};」という行の次に以下のコードを追加し、アップロードする。

   my $cats = $entry->categories;
    for my $cat (@$cats) {
# previous 1
        my $prev = $entry->previous(1);
        if ($prev) {
            if (!$prev->is_in_category($cat)){
                do {
                    $prev = $prev->previous(1);
                } while ($prev && !$prev->is_in_category($cat));
                if ($prev) {
                   $mt->_rebuild_entry_archive_type(Entry => $prev,
                       Blog => $blog,
                       ArchiveType => 'Individual')
                       or die $mt->errstr;
                }
            }
# previous 2
            if ($prev) {
                do {
                    $prev = $prev->previous(1);
                } while ($prev && !$prev->is_in_category($cat));
            }
            if ($prev) {
               $mt->_rebuild_entry_archive_type(Entry => $prev,
                   Blog => $blog,
                   ArchiveType => 'Individual')
                   or die $mt->errstr;
# previous 3
                do {
                    $prev = $prev->previous(1);
                } while ($prev && !$prev->is_in_category($cat));
                if ($prev) {
                   $mt->_rebuild_entry_archive_type(Entry => $prev,
                       Blog => $blog,
                       ArchiveType => 'Individual')
                       or die $mt->errstr;
                }
            }
        }
# next 1
        my $next = $entry->next(1);
        if ($next) {
            if (!$next->is_in_category($cat)){
                do {
                    $next = $next->next(1);
                } while ($next && !$next->is_in_category($cat));
                if ($next) {
                   $mt->_rebuild_entry_archive_type(Entry => $next,
                       Blog => $blog,
                       ArchiveType => 'Individual')
                       or die $mt->errstr;
                }
            }
# next 2
            if ($next) {
                do {
                    $next = $next->next(1);
                } while ($next && !$next->is_in_category($cat));
            }
            if ($next) {
               $mt->_rebuild_entry_archive_type(Entry => $next,
                   Blog => $blog,
                   ArchiveType => 'Individual')
                   or die $mt->errstr;
# next 3
                do {
                    $next = $next->next(1);
                } while ($next && !$next->is_in_category($cat));
                if ($next) {
                   $mt->_rebuild_entry_archive_type(Entry => $next,
                       Blog => $blog,
                       ArchiveType => 'Individual')
                       or die $mt->errstr;
                }
            }
        }
    }
このMT.pmの変更は「nlog(n): 同一カテゴリの前後ナビゲーションと自動再構築」で紹介されていた同一カテゴリの前後の記事を自動再構成するコードを、前後3つの記事を再構成するように私が改変したもの。nlog(n)内で質問に答えていただいたnlog(n)のnさんに感謝します。
 なお、私はこのコードがperlだといういうことも知らずに改変をはじめている。一切無保証だということご理解いただきたい。

投稿者 yhiroaki (2005年02月06日 08:14) | http://hilog.net/mt/mt-tb.cgi/543


コメント
21世紀のアフィリエイト通販生活 2005年02月11日 20:45
MovableType標準では個別アーカイブに<MTEntryPrevio...
続きを読む個別アーカイブに同一カテゴリへの前後リンクを設置! »

はじめまして、
Again Pluginのページですが、既に
なくなっているようです。

よろしければ、Again Pluginを頂くことはできますでしょうか?

宜しくお願いいたします。

投稿者: masahiro : 2005年09月16日 20:22

masahiroさん、こんにちは。
Again Pluginですが、私のところにも圧縮ファイルはなく、plファイル単体しか残っていませんでした。もともと単体配布だったのかもしれません。
単体でよろしければ、コメント投稿時のメールアドレスにメールする等でお渡しできます。いかがでしょうか。

投稿者: yhiroaki : 2005年09月22日 12:50

はじめまして。

大変申し訳ありませんが、私も
Again Pluginを頂くことはできますでしょうか?

投稿者: omoikkiri : 2005年10月04日 14:45

omoikkiriさん、こんにちは。
plファイル単体という条件でよければ、コメント投稿時のメールアドレスにメールする等でお渡しできますよ。

投稿者: yhiroaki : 2005年10月07日 18:13

yhiroakiさん、こんにちは

コメント投稿時のメールアドレスを入力させて頂きました。
お手数ですが、よろしくお願いいたします。

投稿者: omoikkiri : 2005年10月07日 19:31

omoikkiriさん、こんにちは。
Again.plをメールで送りました。メールにも書きましたが、動作したかどうかを教えてください。よろしくお願いします。

投稿者: yhiroaki : 2005年10月08日 23:02

はじめまして。

「アフィリエイトは魂に及び」ブログ関連で検索して、きました。

yhiroakiさんと同様に、カテゴリ内の前後の頁を表示させたく、記事を拝見しました。とても、参考になりました。

私も、「Again Plugin」をいただきたく思っています。お手数をおかけしますが、お送り頂けないでしょうか?

よろしく、お願いします。

投稿者: Tulipa : 2006年01月25日 11:45

Tulipaさん、こんにちは。
Again Pluginをコメント投稿の際に入力していただいたメールアドレスに送りました。

投稿者: yhiroaki : 2006年01月30日 23:33

はじめまして。

カテゴリ内の前後閲覧に関して、大変参考になりました。

Again Plugin、お送り頂けますでしょうか。

お手数ですが、よろしくお願いします。

投稿者: mo : 2006年04月22日 19:43

moさん、こんにちは
暫定ですが記事中にAgain Pluginを公開しました。
ご確認ください。

投稿者: yhiroaki : 2006年04月24日 22:18

yhiroaki  様

ありがとうございます。

投稿者: mo : 2006年05月04日 06:22
コメントする









名前、メールアドレス、URLをあなたのパソコンに記憶させますか?