人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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を使用)

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

●質問者: icta
●カテゴリ:インターネット ウェブ制作
✍キーワード:ENGINE Expression Movable Type MT Pages
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● uetk
●35ポイント

<$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>';

}

}

?>


とか。

◎質問者からの返答

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

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

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

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


2 ● uetk
●35ポイント

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

<?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>';

}

}

?>

◎質問者からの返答

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

いろいろテストしてみたのですが、どうしても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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ