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

現在、index.php 1ページに10枚ずつ画像を表示して
「次へ⇒」を押すと「index.php?imageno=10」⇒「index.php?imageno=20」と次のページに行くとという仕様なのですが、

これにさらに
画像の枚数によって以下のように表示されるリンクを考えています。
imagesフォルダに30枚画像があった場合
1|2|3|

数字を押した場合、その数字のリンクだけが無くなり文字だけになります。
ページを移動した場合はその文字はまたリンクに戻ります。

どうか、お助けください。
よろしくお願いいたします。



●質問者: prius73
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
ベストアンサー
$count = count($files);

までは、まぁ、色々ありますが、とりあえずいいです。

もし、すべてのページへのリンクを出すなら、

define('NUM_PER_PAGE', 10);
$numPages = (int)(($count + NUM_PER_PAGE - 1) / NUM_PER_PAGE);
$currentPage = $pageno / NUM_PER_PAGE;

for ($i = 0; $i < $numPages; ++$i) {
 if ($currentPage != $i) {
 echo "<a href=\"./index.php?imageno={$i}\">" . ($i + 1) . "</a>";
 } else {
 echo ($i + 1);
 }
 if ($i != ($numPages - 1)) {
 echo "|";
 }
}

現在のページを含めて5ページ分だけとかなら、

define('NUM_PER_PAGE', 10);
define('NUM_LINKS', 5);
$numPages = (int)(($count + NUM_PER_PAGE - 1) / NUM_PER_PAGE);
$currentPage = $pageno / NUM_PER_PAGE;

$begin = max(array(0, $currentPage - (NUM_LINKS - 1) / 2));
$end = min(array($numPages - 1, $begin + NUM_LINKS - 1));

for ($i = $begin; $i <= $end; ++$i) {
 if ($currentPage != $i) {
 echo "<a href=\"./index.php?imageno={$i}\">" . ($i + 1) . "</a>";
 } else {
 echo ($i + 1);
 }
 if ($i != ($numPages - 1)) {
 echo "|";
 }
}

みたいな感じでどうでしょ?

動作確認してないので、おかしいところあったらごめんなさいですが、コンセプトは分かってもらえるかと。

何かの参考になれば。

◎質問者からの返答

tdoi様

ご回答、誠にありがとうございました。

まさに思い通りの動作で感動いたしました!!

最後にいくつか教えていただきたいのですが、

define('NUM_LINKS', 5);

の“5”の箇所を“10”に変更し、10ずつの表示にしようと思ったんですが、

2.5|3.5|4.5|5.5|6.5|7.5|8.5|

のように表示がおかしくなってしまいます。

何処を修正すればよいでしょうか。

(数値を10以下にすれば、問題ないようです。)


それと、

1|2|3|4|5|6|7|8|9|10|

となっているときに以下のように一番右側に最後のページとなるリンクの表示

1|2|3|4|5|6|7|8|9|10|...27

(27を押した場合は)

18|19|20|21|22|23|24|25|26|27|

最後のページの「...27」のリンクが消えます。

また、

「1」以外にいるときに以下のように左端に「1...」と表示をしたいと考えています。

1...|3|4|5|6|7|8|9|10|11|12|...27


どうかご教授お願いいたします。

よろしく願いいたします。

関連質問

●質問をもっと探す●



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