http://lab.fancs.com/ の ArchivePage をインストールしました。
エントリー数が増えてきて、アーカイブのページが大きくなりすぎてきたので、小分けにしてページ遷移できるようにしようと思い、プラグインを探していたら ArchivePage が見つかりました。
特徴は php なしでページ分割を実現してくれるとこです。
設定をしてみたのですが、まだバージョンも 0.0.2 で作りが不十分なようです。
コメントを見ていると、Widget では上手く動かないらしいです。
ボクも Widget に設定したのですが、カテゴリーを再構築してもページ分割してくれません。
でも、1つのエントリーを選んで再構築すると、そのエントリーのカテゴリーはページ分割されます。
また、ページ送りリンクを出力するタグ MTArchivePager の属性に separator="区切り文字" が使えると書いてあるのですが、実際には機能しません。
plugins/ArchivePage/ArchivePage.pl の 241行目を改修すると機能します。
$ diff -u ArchivePage.pl.orig ArchivePage.pl
--- ArchivePage.pl.orig Thu Nov 2 12:32:51 2006
+++ ArchivePage.pl Wed Mar 21 16:09:50 2007
@@ -238,7 +238,7 @@
my $path = ap_page_link($ctx, $args, $cond);
my $_class = ($i == $current) ? $class : '';
my $html = sprintf($format, $path, $_class, ($i + 1));
- $res .= ',' if $res;
+ $res .= $separator if $res;
$res .= $html;
}
$ctx->stash('ap_link_number', $orig_number);
何件ずつページ分割するかは、プラグインの設定ページで設定できるのだけれど、その「何件」という区切りの数字を表示してくれるタグも用意して欲しかった。
というわけで、自分で実装してみた。MTArchivePageLimit タグ。
同じく ArchivePage.pl を改修しています。勝手に改造してパッチ載せると怒られるかな?
コードはこんな感じ。改造前と後で diff を取ってます。上記の separator fix パッチも含んでます。
$ diff -u ArchivePage.pl.orig ArchivePage.pl
--- ArchivePage.pl.orig Thu Nov 2 12:32:51 2006
+++ ArchivePage.pl Wed Mar 21 16:32:33 2007
@@ -33,6 +33,7 @@
MT::Template::Context->add_tag(ArchivePageLink => \&ap_page_link);
MT::Template::Context->add_tag(ArchivePageTitle => \&ap_page_title);
MT::Template::Context->add_tag(ArchivePager => \&ap_pager);
+ MT::Template::Context->add_tag(ArchivePageLimit => \&ap_page_limit);
MT->add_callback('BuildFile', 1, $plugin, \&ap_build_file);
}
@@ -238,11 +239,18 @@
my $path = ap_page_link($ctx, $args, $cond);
my $_class = ($i == $current) ? $class : '';
my $html = sprintf($format, $path, $_class, ($i + 1));
- $res .= ',' if $res;
+ $res .= $separator if $res;
$res .= $html;
}
$ctx->stash('ap_link_number', $orig_number);
$res;
+}
+
+sub ap_page_limit
+{
+ my ($ctx, $args, $cond) = @_;
+ my $limit = $ctx->stash('ap_limit');
+ $limit;
}
sub _ap_page_count
それで、ボクのアーカイブのウィジェットはこんな感じ。
<MTIfArchivePage>
<p><$MTArchivePageLimit$>エントリー毎に分割して表示しています。</p>
<div class="pagelinks">
<ul>
<MTArchivePageFirst>
<li><a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="最初"$></a>
</MTArchivePageFirst>
<MTArchivePagePrevious>
<li><a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="前のページ"$></a>
</MTArchivePagePrevious>
<li> <small>ページ <$MTArchivePager class="blink" separator=" "$></small>
<MTArchivePageNext>
<li><a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="次のページ"$></a>
</MTArchivePageNext>
<MTArchivePageLast>
<li><a href="<$MTArchivePageLink$>"><$MTArchivePageTitle text="最後"$></a>
</MTArchivePageLast>
</ul>
</div>
</MTIfArchivePage>
とりあえず、カテゴリーアーカイブにだけ適用してみました。
