Movable Type のページ分割用プラグインに MTPaginate があります。

http://cross-breed.com/archives/200401251333.php
これだと、エントリーが1000以上ある場合に、1ページ10エントリーに分割した場合、≪前のページ 次のページ≫1 2 3 4 5 6 7 8 9 10 11 12・・・100とすべてのページ番号が表示されてしまいます。
これを▼以下のURLのように、現在閲覧中のページの直近の5ページのみを表示する方法はMTでありませんでしょうか?
Page 5 of 9 pages « First < 3 4 5 6 7 > Last »
http://veerle.duoh.com/blog/archive-summary/category/Design/P40/ (Expression Engineを使用)

ページ分割、前後、直近など思いつく限りのキーワードで検索してみましたが見つかりませんでした。ご存知の方がいらっしゃいましたら教えていただければ幸いです。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2006/09/12 08:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:uetk No.1

回答回数21ベストアンサー獲得回数0

ポイント35pt

<$MTPaginateNavigator$>


の代わりに


<?php

$my_page_width = 2;//カレントページの前後に表示するページ数

if ($paginate_num_pages - ($paginate_current_page + $my_page_width) < 0){

for($i=($paginate_num_pages - (($my_page_width*2)+1)); $i<=$paginate_num_pages; $i++) {paginate_custum($i);}

}else if(($paginate_current_page - $my_page_width)<1){

for($i=1; $i<=(($my_page_width*2)+1); $i++) {paginate_custum($i);}

}else{

for($i=($paginate_current_page - $my_page_width); $i <=($paginate_current_page + $my_page_width); $i++) {paginate_custum($i);}

}

function paginate_custum($i){

global $paginate_current_page,$paginate_self;

if($i > 1){echo ' | ';}

if($i == $paginate_current_page) {

echo sprintf("&nbsp;%d&nbsp;", $i);

} else {

echo "<a href=\"$paginate_self=$i\"" . sprintf('>&nbsp;%d&nbsp;', $i) . '</a>';

}

}

?>


とか。

id:icta

お返事が遅くなってスミマセン!

時間が取れずにまだ動作確認ができておりません。

近日中に改めてお返事いたします。

本当に申し訳ありません。

2006/09/06 22:21:09
id:uetk No.2

回答回数21ベストアンサー獲得回数0

ポイント35pt

ちょっとおかしかったので、治しました。

<?php

$my_page_width = 4;//カレントページの前後に表示するページ数

if ($paginate_num_pages < (($my_page_width*2)+1)){

for($i=1; $i<=$paginate_num_pages; $i++) {paginate_custum($i);}

}else{

if ($paginate_num_pages < ($paginate_current_page + $my_page_width)){

for($i=($paginate_num_pages - (($my_page_width*2)+1)); $i<=$paginate_num_pages; $i++) {paginate_custum($i);}

}else if(($paginate_current_page - $my_page_width)<1){

for($i=1; $i<=(($my_page_width*2)+1); $i++) {paginate_custum($i);}

}else{

for($i=($paginate_current_page - $my_page_width); $i <=($paginate_current_page + $my_page_width); $i++) {paginate_custum($i);}

}

}

function paginate_custum($i){

global $paginate_current_page,$paginate_self;

if($i > 1){echo ' | ';}

if($i == $paginate_current_page) {

echo sprintf("&nbsp;%d&nbsp;", $i);

} else {

echo "<a href=\"$paginate_self=$i\"" . sprintf('>&nbsp;%d&nbsp;', $i) . '</a>';

}

}

?>

id:icta

お返事遅くなって大変申し訳ありませんでした。

いろいろテストしてみたのですが、どうしても2点、解決しないところがあります。

○1点目

▼以下のURLではエントリーの上下2箇所に、ページ数が表示されるようになっています。

http://cross-breed.com/archives/200401251333.php

教えていただいたとおり、<$MTPaginateNavigator$>の代わりにphpのコードを置き換えてみました。

これが上1箇所だけなら、問題なく表示されます。

しかし上下2箇所になると下のようなエラーメッセージが表示され、下側のページ数の下に表示されてしまいます。

いろいろ変更してみたのですがphpのコードがよくわからないため解決にいたりませんでした。

Fatal error: Cannot redeclare paginate_custum() (previously declared in /●●/XXXX/www/blog/topic/index.php:114) in /●●/XXXX/www/blog2/topic/index.php on line 759

○2点目

100ページあるカテゴリーだと、1ページ目と100ページ目へのアクセスが困難になります。

そのため▼下のように表示したいと考えています。

最初のページ1と最後のページ100はどのように表示したらよいのでしょうか?(<>は前のページ、次のページへのリンク)

<> 1...16|17|18|19|20...100

もしお手数でなければ教えていただけませんでしょうか。

ヤフーオークションや楽天でもこれに近いページ構成になっており、需要は少なくはないと思うのですが、紹介しているページが見当たりません。

お知恵をお借りできれば幸いです。

2006/09/07 21:48:45
  • id:uetk
    Fatal error: Cannot redeclare....

    関数の2重定義エラーかな
    function paginate_custum($i){

    global $paginate_current_page,$paginate_self;

    if($i > 1){echo ' | ';}

    if($i == $paginate_current_page) {

    echo sprintf("&nbsp;%d&nbsp;", $i);

    } else {

    echo "<a href=\"$paginate_self=$i\"" . sprintf('>&nbsp;%d&nbsp;', $i) . '</a>';

    }

    の部分は、1ファイル内に1度だけ書いてください。
  • id:uetk
    こんな感じかなぁ
    試してないです。

    <a href="<$MTArchiveLink$>?page=1">1ページ</a>
    <a href="<$MTArchiveLink$>?page=<?PHP $paginate_num_pages ?>">ラストページ</a>

    1ページ目は絶対に「1」なので、『<$MTArchiveLink$>?page=1』
    ラストページは、
    PHPの変数『$paginate_num_pages』が総ページ数なので、『<$MTArchiveLink$>?page=<?PHP $paginate_num_pages ?>』
    かなぁ

    全記事表示は、
    <a href="<$MTArchiveLink$>?page=all">全記事表示</a>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません