≪HOME(21世紀のアフィリエイト通販生活)
個別アーカイブに同カテゴリへの前後リンクを設置~MovableType
MovableType標準では個別アーカイブに<MTEntryPrevious>や<MTEntryNext>などのテンプレートタグを使って、時系列にのっとった前後記事へのリンクが付いています。
しかしカテゴリ分けして新エントリーを書いていく以上、前後記事ってのは必ずしも同一カテゴリの記事ではありません。
これについて何とかならないかとぼんやり思っていると、やっぱり世の中には同じ事を考える人って居るもんですね。色んなサイトを参考にチャレンジしてみました。
参考にさせて貰ったのはこちらです。感謝感謝です!m(_"_)m
├ 同一カテゴリの前後の記事へのリンクを表示と自動再構築 ~HiLOG
├ 同一カテゴリの前後ナビゲーションと自動再構築 ~nlog(n)
├ カテゴリ内の次・前リンク ~Play with Weblog!
├ 同一カテゴリーの前後記事を個別ページに表示 ~アフィリエイトは我が魂に及び
├ 同一カテゴリー内で記事の前後移動 ~なかよしこよし
└ 複数Categoryなページめくりの再構築(プラグインありなし判定) ~Ruby site
今回やりたい事のまとめ
☆個別ページでの同一カテゴリ内への前後移動。
☆個別ページでの前後移動のリンクタイトル数を増やす。標準では前後に各一つずつ。
使用するプラグインは以下の二つです。
・PreviousNextInCategory ~ 個別ページで同一カテゴリへの前後ナビゲーションを設置できます。
・Again Plugin ~ 個別ページで前後リンクのタイトル数を増やせます。
ただし、PreviousNextInCategoryプラグインはそのままでは複数カテゴリに対応してないので、PreviousNextInCategory.plを以下のように修正、青字部分を追加します。
sub _hdlr_entry_previous_in_category {
:
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 $cat = $e->category
or return '';
if ($ctx->stash('category') ne '') {$cat = $ctx->stash('category');}
終わったら各プラグインをpluginsフォルダにアップします。
次に個別アーカイブに同一カテゴリ内への前後リンクを表示させる為に以下のコードを挿入します。エントリーが属するカテゴリ情報を表示させる為に、全体を<MTEntryCategories>で囲みます。また<MTAgain limit="3">では前後リンクの数を調整できます。
<MTEntryCategories>
▽カテゴリ<a href="<$MTCategoryArchiveLink$>">[<$MTCategoryLabel pmhc=""$>]</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>
≪<a href="<$MTBlogURL$>">HOME</a>
これで終了と言いたい所ですが、このままでは新エントリーを投稿した時に、カテゴリ内の1つ前の記事は再構築されない、という重大な問題があります。つまりカテゴリ内で1つ前の記事からのリンクは更新されず、機能しないというトラブルが発生します。まぁ手動で別途再構築すれば済む話ですが正直面倒です。
これを解決する為に、lib/MT.pmを開き以下の修正を加えます。以下の修正はHiLOGさんの同一カテゴリの前後の記事へのリンクを表示と自動再構築を参考にしました。ちなみに以下は前後3つの記事を自動再構築する為の修正です。
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;
}
}
}
}
これで終了です。但しlib/MT.pmを以上のように修正すると、PreviousNextInCategoryプラグインを使ってなくても、同カテゴリの前後の記事を自動再構築してしまいます。同プラグインを外す時は、元に戻すのを忘れないようにしましょう。
追記:
MT3.2以降では、lib/MT.pm ではなく /lib/MT/WeblogPublisher.pm を修正します。191行目あたりに、下記記述があるので、その下に丸々上記コードをコピペします。
return 1 unless $param{BuildDependencies} || $param{BuildIndexes} ||
$param{BuildArchives};
#ここに入れる!
全部完了して思ったのは、全体の再構築時間が増えてしまったのは正直マイナスでした。(MovableType 3.20以降では改善!)
ただ訪問者にとっては、こちらの方が優しいナビになっていると思います(思いたいです)。
投稿者 Locutus : 2005年02月09日 17:44 EDIT カテゴリ⇒ MovableTypeカスタマイズ
各アーカイブファイルの効率的な出力ファイル名 ~MovableType '05 2/25
カテゴリ並び替えで<$MTCategoryLabel$>をそのまま使える文字列置換プラグインを発見! '05 2/21
特定のカテゴリ名を表示しないように設定しました~MovableType '05 2/15
→ 個別アーカイブに同カテゴリへの前後リンクを設置~MovableType '05 2/09
Movable Type 3.151日本語版にバージョンアップ! '05 2/08
MovableTypeにコメントスパム対策を施しました。 '05 2/07
Movable Type 3.15にバージョンアップしました! '05 2/05
≪HOME
[HP製作]PreviousNextInCategoryプラグイン導入方法 from アロハカメラ@はてな
http://www.55link.com/archives/2005/02/09-1744.html [続きを読む]
トラックバック時刻: 2005年10月18日 18:07
同一カテゴリ内の前後の記事へのリンクを張る from iandeth.
個別アーカイブページ(各エントリ記事)にて、<MTEntryNext>や<MTEntryPrevious>タグによる投稿日付順の次... [続きを読む]
トラックバック時刻: 2005年11月15日 03:17
MTのエントリーアーカイブの前後リンク。 from Fake iTunes Feat.SITE159 Base Designed by APPLE
個別アーカイブに同カテゴリへの前後リンクを設置~MovableType まあ、前... [続きを読む]
トラックバック時刻: 2006年03月08日 13:06
≪HOME(21世紀のアフィリエイト通販生活)