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>
動作しねーよとか、わかんねーとかあったらコメントでも書いてください。
「どうやってやるの?」系の質問じゃない限り、答えるよう努力しますんで、はい。