2004年08月20日
カテゴリ内の次・前リンク
前々から便利だなと思っていたカテゴリ内を渡り歩くリンクをつけることにした。
使うプラグインはPrevious and next in categoryプラグイン。
参考にさせていただいたのは、Ruby siteさま&nlog(n)さま。
まず以下のサイトからプラグインをダウンロード。
→phil ringnalda dot comさま
複数Category用編集
ダウンロードしてきた「PreviousNextInCategory.pl」を複数Categoryに対応するため、Ruby siteさまの複数Categoryなページめくりに従い11行目と35行目あたりの以下の部分を修正。
sub _hdlr_entry_previous_in_category {
:
my $cat = $e->category
or return '';
my $prev = $e->previous(1);
:
sub _hdlr_entry_next_in_category {
:
my $cat = $e->category
or return '';
赤字部分を追加します。:
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');}
修正したら、アスキーモードでpluginフォルダにFTPします。
前後の個別アーカイブ再構築対応
このプラグインは導入しても同カテゴリの前後のアーカイブは再構築されないという問題点があるらしい。そこで次にnlog(n)さまを参照しながら前後の個別アーカイブの再構築を組込むために、/lib/MT.pmの修正を行ないます。
return 1 unless $param{BuildDependencies};
この改造を施すともしこのプラグインを使用していなくても同じカテゴリの前後の記事を再構築してしまうそうなので、プラグインをやめたときには、この改造は元に修正しておいたほうが良いとのこと。 my $cats = $entry->categories;
# previous
for my $cat (@$cats) {
my $prev = $entry->previous(1);
if ($prev && !$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;
}
}
# next
my $next = $entry->next(1);
if ($next && !$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;
}
}
}
## Rebuild previous and next entry archive pages.# previous
for my $cat (@$cats) {
my $prev = $entry->previous(1);
if ($prev && !$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;
}
}
# next
my $next = $entry->next(1);
if ($next && !$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;
}
}
}
修正をしたら、アスキーモードでMT/libにFTPします。
テンプレートの修正
さてもう一息です。個別エントリーアーカイブテンプレートの修正をします。
私が書いたのは次の通りです。
<p id="menu">
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>">« <$MTEntryTitle$></a> |
</MTEntryPrevious>
<a href="<$MTBlogURL$>">INDEX</a>
<MTEntryNext>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNext><BR/ >
<MTEntryCategories>
<MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink category_type="Individual"$>">«
<$MTEntryTitle$></a> |
</MTEntryPreviousInCategory>
<a href="<$MTCategoryArchiveLink$>"><$MTCategoryDescription$></a>
<MTEntryNextInCategory>
| <a href="<$MTEntryPermalink category_type="Individual"$>"><$MTEntryTitle$> »</a>
</MTEntryNextInCategory>
</MTEntryCategories>
</p>
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>">« <$MTEntryTitle$></a> |
</MTEntryPrevious>
<a href="<$MTBlogURL$>">INDEX</a>
<MTEntryNext>
| <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNext><BR/ >
<MTEntryCategories>
<MTEntryPreviousInCategory>
<a href="<$MTEntryPermalink category_type="Individual"$>">«
<$MTEntryTitle$></a> |
</MTEntryPreviousInCategory>
<a href="<$MTCategoryArchiveLink$>"><$MTCategoryDescription$></a>
<MTEntryNextInCategory>
| <a href="<$MTEntryPermalink category_type="Individual"$>"><$MTEntryTitle$> »</a>
</MTEntryNextInCategory>
</MTEntryCategories>
</p>
これに附随するスタイルシートも直します。一応参考に書いておきます。
お好きなように修正して、再構築してください。
#menu {
font-size: 8pt;
color: #8FABBE;
text-align: center;
border: 1px dotted #8FABBE;
}
#menu a, #menu a:visited, #menu a:link, #menu a:active {
font-size: 8pt;
color: #8FABBE;
text-decoration: underline;
}
#menu a:hover {
font-size: 8pt;
color: #006699;
text-decoration: underline;
}
font-size: 8pt;
color: #8FABBE;
text-align: center;
border: 1px dotted #8FABBE;
}
#menu a, #menu a:visited, #menu a:link, #menu a:active {
font-size: 8pt;
color: #8FABBE;
text-decoration: underline;
}
#menu a:hover {
font-size: 8pt;
color: #006699;
text-decoration: underline;
}
Posted luna : 2004年08月20日 11:14 | プラグイン
TrackBackPings
トラックバックを何回もやっても気にしないでいいですよ。こちらで削除しますので。
TrackBack URL>>
» 個別アーカイブに同一カテゴリへの前後リンクを設置! from 21世紀のアフィリエイト通販生活(on: 2005年02月11日 21:00)
MovableType標準では個別アーカイブに<MTEntryPrevio...