Ramdom Entry Pickup
- 初めてのセルフガソリンスタンド (2006年02月05日)
- 病院で3時間も待たされる。。。ゴルゥア〜〜!! (2007年03月19日)
- 新たな。。。。「たくらみ」 (2006年07月07日)
- 減煙するぞ!宣言!! (2006年01月18日)
- 【「楽天アフィリエイト」デッドリンクチェックスクリプト for MT】を「1.00」にバージョンアップ (2006年12月29日)
« マウスオン時にテキストをずらす | メイン | トトロのオルゴール »
これも前々から導入したかったカスタマイズです。
同一カテゴリー内でエントリーの移動
これには、2通りのやり方があるようです。
1. プラグイン「EntryCategoryLinks」を使う方法
2. プラグイン「PreviousNextInCategory」を使う方法
しかし、どちらのプラグインにも同一の問題がある。
カテゴリ内の1つ前の記事は再構築されない。したがって、1つ前の記事からのリンクは更新されないという問題がある。
ということである。
それでは一つずつ解決方法を記す。
●プラグイン「EntryCategoryLinks」を使う方法
上記サイトに、「EntryCategoryLinks」と併用することで問題を解決できる別なプラグインそのものを公開されています。
具体的には、
をダウンロードし、MT/pluginsにUPする。
同様に、上記サイトの「RebuildPrevNextInCategory.pl」をダウンロードし、
MT/pluginsにUPする。
そして、エントリーテンプレートに、以下のようなタグを挿入する。
後は、エントリーアーカイブをリビルドすれば完了。
●プラグイン「PreviousNextInCategory」を使う方法
下記サイトより、「PreviousNextInCategory」をダウンロードする。
phil ringnalda » Blog Archive » Previous and next in category
そのプラグインファイルに以下のように赤文字の部分を加える。
sub _hdlr_entry_next_in_category {
...
my $cat = $e->category
or return '';
if ($ctx->stash('category') ne '') {$cat = $ctx->stash('category');}
my $next = $e->next(1);
...
}
編集後、MT/pluginsにUPする。
次に、「MT/lib/MT/WeblogPublisher.pm」の193行目あたりに、以下のスクリプトを追加する。
(MT3.1xは、MT/lib/MT.pmを編集する。)
if((defined $MT::Template::Context::Global_handlers{'EntryPreviousInCategory'}->{'is_container'})
&& (defined $MT::Template::Context::Global_handlers{'EntryNextInCategory'}->{'is_container'})) {
my $cats = $entry->categories;
# previous
for my $cat (@$cats) {
my $prev = $entry->previous(1);
if($prev && !$prev->is_in_category($cat)) {
$prev = $entry->previous(2);
while ($prev && !$prev->is_in_category($cat)){
$prev = $prev->previous(1);
}
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)) {
$next = $entry->next(2);
while ($next && !$next->is_in_category($cat)){
$next = $next->next(1);
}
if ($next) {
$mt->_rebuild_entry_archive_type(Entry => $next,
Blog => $blog,
ArchiveType => 'Individual')
or die $mt->errstr;
}
}
}
}
そして、エントリーテンプレートに以下のようなタグを挿入する。
これでエントリーアーカイブをリビルドすれば完了。
で。。。。
結局、両方試してみたが、つまるところ、
これを導入すると、複数カテゴリーが設定してあるエントリーには何も出てこない。。。
これと、通常の「<MTEntryPrevious>」「<MTEntryNext>」の両方を表示しようかと思ったが、
これではリビルドに時間がかかりすぎる。。。。
なんせ、このブログでは複数カテゴリー指定をしているエントリーがほとんどだからである(笑)
リビルドの時間を取るか、ユーザービリティーを取るかで、今悩んでいる。。。。(^^;)
ま、とりあえず、複数カテゴリーを使用していない、
サブブログ、「リラックマ・ショッピングモール」では前者を導入している。
なにかいい解決方法はないだろうか。。。。
Link HTML:
トラックバックURL: