-2

a ディレクトリに 400 枚以上の写真を含む Web サイトがある。各ページに12個ずつ掲載したいと思います。どうやってやるの?これが私の実際のコードです:

 <!doctype html>
<html lang="hu">
    <head>
        <title>Amatőr</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <h2><a href="../php/upload_picture.php" style="font-size:15pt; color:#ff00e8; text-decoration: none;">Vannak jó képeid? Töltsd fel őket és kikerülhetnek az oldalra!</a></h2>
        <article>
            <header>
                Amatőr Lányok
            </header>
            <div id="kepek">
                <?php
                $imgdir = '../img/blog/img/amator/'; //Pick your folder
                $allowed_types = array('png','jpg','jpeg','gif'); //Allowed types of files
                $dimg = opendir($imgdir);//Open directory
                while($imgfile = readdir($dimg))
                {
                  if( in_array(strtolower(substr($imgfile,-3)),$allowed_types) OR
                      in_array(strtolower(substr($imgfile,-4)),$allowed_types) )
                /*If the file is an image add it to the array*/
                  {$a_img[] = $imgfile;}
                }


                 $totimg = count($a_img);  //The total count of all the images
                //Echo out the images and their paths incased in an li.
                 for($x=0; $x < $totimg; $x++){ echo "<a onclick='Lightbox.start(this, false, false, false, false); return false;' rel='lightbox[amator]' href='" . $imgdir . $a_img[$x] . "'><img class='kep_listaz' width='200px' height='160px' src='" . $imgdir . $a_img[$x] . "' /></a>";}
                ?>
            </div>
        </article>
    </body>
</html>

Thanks!
4

2 に答える 2

0

したがって、これは実際には数学の問題です。画像の総数を取得し、それをページあたりの最大画像数で割る必要があります (必ず確認しceil()てください)。

これらの画像をすべて表示するために必要な最大ページ数になりました。ここで行う必要があるのは、page=1/page=2 などを使用するか、または開始と終了として使用するかを決定することです。どちらも比較的簡単ですが、必要なページがあります

$page = (int)$_GET['page'];
$start = $page * $max_items_per_page;
$end = $start + $max_items_per_page;

この方法はおそらく節約です。また、追加のコードを追加して、要求されたページの範囲外にならないようにします。

これで、ファイルの配列を取得して ( を使用することをお勧めしますglob())、array_slice()それを最初から最後まで使用するだけです。

最後に、前/次のページを表示するか、ページのすべて (または一部) をリストします。次と前を取得するのは、 と に 1 を追加/削除するのと同じくらい$page簡単$next = $page + 1;です$prev = $page-1;。繰り返しますが、これらの両方について、範囲外でないことを再確認してください。範囲外の場合は、次/前を表示しないのがおそらく最善です。

于 2012-07-01T12:12:59.330 に答える
0

この種のデータのページネーションには 2 つの方法があります。すべてを送信して JavaSctipt がユーザーに一度に一部のみを表示するフロントエンドと、一度に一部のみをレンダリングするバックエンドです。ページ全体をリロードすると、さらに多くの情報が得られます。

それを機能させる最速の方法は、バックエンド メソッドを使用することです。

forループの前に追加$page = isset($_GET['page']) ? $_GET['page']-1 : 0;

ループの引数を次のように変更します $x=$page*12; $x < $totimg && $x < ($page+1)*12; $x++

?page=3次に、URLに追加してページを操作できます

また、無効なページ番号が送信された場合に備えて、エラー処理を追加することもできます。

于 2012-07-01T12:13:50.937 に答える