plasmasphere.net -プラズマスフィア ドットネット-
Diary
MTPaginate改造:ページング表示の変更
2008/10/01(Wed) 00:10
デフォルトのMTPaginateの表示がどうにもならんくらいダッセエんで、ちょっといじくってみました。
基本的には小粋空間のページ分割と似てますが、全く同じだと芸が無いので要所を変えてます。
例えば、<MTEntries lastn="9999999"> みたいに全件表示してページングした時のページリンクの羅列を制御したりとか。
カユイ所に手が届くぜ?
挙動は今の日記見てもらえば大体わかりますが、動作は以下の感じ。
- 1ページを表示している時は、前のページリンクを表示しない。
- 最終ページを表示している時は、次のページリンクを表示しない。
- ページの数が設定数を超えた場合、省略して1ページ目と最終ページのリンクを表示する。
- エントリー全件表示の非表示機能。
3つ目の項目が目玉です。
いらねー人は小粋空間さんの改造でオッケーですぞ。
MTPaginate.pl を改変します。
私の持ってたバージョンが 1.4 だったので、それ以外だと行数が違う可能性があるので、その辺はご容赦。
ていうか分からないならやらない方が無難です、動かなくなっても私は責任持てませんので、はい。
以下改変部分。
514行目から544行目の部分を…
$res .=<<PHP
if(\$paginate_current_page == 'all') {
echo '$all_current$separator';
} else {
echo "<a href=\"\$paginate_self=all\"$title$target>$all</a>$separator";
}
PHP
}
$format_title = " . sprintf(' title="$format_title"', \$i)" if $format_title;
$res .=<<PHP;
for(\$i = $start; \$i <= $end; \$i++) {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\"\$paginate_self=\$i\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
PHP
if ($format_all && $place_all eq 'after') {
my $title = "";
$title = sprintf(" title=\"$format_all_title\"", $num_pages) if $format_all_title;
$res .=<<PHP
if(\$paginate_current_page == 'all') {
echo '$separator$all_current';
} else {
echo "$separator<a href=\"\$paginate_self=all\"$title$target>$all</a>";
}
PHP
以下のソースに変更。
$res .=<<PHP
if(\$paginate_current_page == 'all') {
echo '$all_current$separator';
} else {
echo "<a href=\"\$paginate_self=all\"$title$target>$all $end Pages.</a>$separator";
}
PHP
}
$format_title = " . sprintf(' title="$format_title"', \$i)" if $format_title;
$res .=<<PHP;
if(\$paginate_current_page - ($offset + 1) > 0 && $baf_link != "none") {
echo "<a href=\"\$paginate_self=1\"$target" $format_title . sprintf('>$format', '1') . '</a>';
echo '$sub_separator';
}
for(\$i = $start; \$i <= $end; \$i++) {
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
if((\$i < \$paginate_current_page) && (\$paginate_current_page - \$i < ($offset + 1))) {
echo "<a href=\"\$paginate_self=\$i\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
echo '$separator';
}
if((\$i > \$paginate_current_page) && (\$i - \$paginate_current_page < ($offset + 1))) {
echo '$separator';
echo "<a href=\"\$paginate_self=\$i\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
}
if(\$paginate_current_page + $offset < $end && $baf_link != "none") {
echo '$sub_separator';
echo "<a href=\"\$paginate_self=$end\"$target" $format_title . sprintf('>$format', $end) . '</a>';
}
PHP
if ($format_all && $place_all eq 'after' && $place_all ne 'none') {
my $title = "";
$title = sprintf(" title=\"$format_all_title\"", $num_pages) if $format_all_title;
$res .=<<PHP
if(\$paginate_current_page == 'all') {
echo '$separator$all_current';
} else {
echo "$separator<a href=\"\$paginate_self=all\"$title$target>$all $end Pages.</a>";
}
PHP
433行目以下に強調部分の3行を追加。
433 my $format_title = $args->{format_title} || "";
my $offset = $args->{offset} || 2;
my $sub_separator = $args->{sub_separator} || '...';
my $baf_link = $args->{baf_link} || 1;
で改変終了です。
テンプレートから呼び出す時は、MTPaginateNavigator を指定します。
追加のパラメータは以下の通り。
前後のページリンクの表示数を変更する場合。デフォルトは2件。
<$MTPaginateNavigator offset="4">
1ページのリンクと最終ページのリンクを非表示にする場合。デフォルトは表示。
シンプルにページ替えのみの表示で良い場合は指定してください。
<$MTPaginateNavigator baf_link="none">
1ページリンク、最終ページリンクと、ページ替えリンクのセパレータを変更する場合。デフォルトは「...」。
<$MTPaginateNavigator sub_separator="-">
エントリー全件表示のリンクを消す場合。デフォルトは表示。
<$MTPaginateNavigator place_all="none">
パラメータは複数指定できるので、必要ならば指定してやってください。
ちなみに、この日記の指定はこんな感じです。
<$MTPaginateNavigator place_all="none" offset="4" separator=" ">
記事表示部分のテンプレートはこんな感じ。
<MTPaginate> <MTPaginateIfMultiplePages> <p class="paginate"> <MTPaginateIfPreviousPage_> <a href="<$MTPaginatePreviousPageLink$>">«</a> </MTPaginateIfPreviousPage_> <$MTPaginateNavigator place_all="none" offset="4" separator=" "> <MTPaginateIfNextPage_> <a href="<$MTPaginateNextPageLink$>">»</a> </MTPaginateIfNextPage_> </p> </MTPaginateIfMultiplePages> <MTPaginateContent max_sections="7"> <MTEntries lastn="9999999"> <$MTEntryTrackbackData$> <div class="dbox"> <h2 id="a<$MTEntryID pad="1"$>"><a href="<$MTEntryPermalink valid_html="1"$>"><$MTEntryTitle$></a> <span class="sub"><$MTEntryDate format="%Y年%m月%d日"$></span></h2> <$MTEntryBody eval="1"$> <MTEntryIfExtended> <p class="extended"><a href="<$MTEntryPermalink$>#more">続きを読む "<$MTEntryTitle$>"</a></p> </MTEntryIfExtended> <$MTInclude module="Posted_mod"$> </div> <$MTPaginateSectionBreak$> </MTEntries> </MTPaginateContent> <MTPaginateIfMultiplePages> <p class="paginate"> <MTPaginateIfPreviousPage_> <a href="<$MTPaginatePreviousPageLink$>">«</a> </MTPaginateIfPreviousPage_> <$MTPaginateNavigator place_all="none" offset="4" separator=" "> <MTPaginateIfNextPage_> <a href="<$MTPaginateNextPageLink$>">»</a> </MTPaginateIfNextPage_> </p> </MTPaginateIfMultiplePages> </MTPaginate>
動作しねーよとか、わかんねーとかあったらコメントでも書いてください。
「どうやってやるの?」系の質問じゃない限り、答えるよう努力しますんで、はい。
