0

私は Web ページのコーディングが初めてで、問題が発生しています...

現在、ディレクトリから画像をリストしてエコーし、ライトボックスで表示するコードを追加できます。

現在、コードはディレクトリからすべての画像を5つの画像の行で表示しますが、制限はありません...

コードをページの結果に変更するにはどうすればよいですか。たとえば、1 行だけで、ページごとに 5 つの画像があるとします。次に、いつものように「Page: 1, 2, 3 ... Next ...」と表示します。本当にどうすればいいのかわかりません...いろいろ試してみましたがうまくいきません...

コードは次のようになります。

<?php 

$page = $_SERVER['PHP_SELF'];

// How many images per row
$maxCols = 5;

// Directory where the albums are stored
$base = "albums";

// Get album title
$get_album = $_GET['album'];


if (!$get_album)
{
    $handle = opendir($base);

    echo "<div id='albums' class='imageRow'>";

    while (($file = readdir($handle))!==FALSE)
    {       
        if (is_dir($base."/".$file) && $file != "." && $file != "..")
        {
            //$list []= $file;
            $img = $file.".jpg"; //Main image from each album.

            echo "<div class='image'><a href='$page?album=$file'><img src='thumbnails.php?img=$base/$img' alt='$file' /></a><div class='album'><i>$file</i></div></div>";
        }       
    }

    echo "</div>";

    closedir($handle);

    //$total = count($list);

}
else
{
    if (!is_dir($base."/".$get_album) || strstr($get_album,".")!=NULL || strstr($get_album,"/")!=NULL || strstr($get_album,"\\")!=NULL)
    {
        echo "Album doesn't exist.";
        echo "<p /><a href='$page'>Back to albums</a>";
    }
    else
    {
        $count = 0;
        $handle = opendir($base."/".$get_album);

        echo "<div id='images' class='imageRow'>";

        while (($file = readdir($handle)) !== FALSE)
        {
            if ($file != "." && $file !== "..")
            {
                echo "<div class='image'><a href='$base/$get_album/$file' rel='lightbox[1]' title='$file'><img src='thumbnails.php?img=$base/$get_album/$file' alt='$file' /></a></div>";

                $count++;

                if($count == $maxCols) 
                {
                    echo "</div>";
                    echo "<div id='images' class='imageRow'>";
                    $count = 0;
                }

                $list[] = $file; //Assign the images to a list to allow count.
            }
        }

        echo "</div>";

        closedir($handle);

        $total = count($list); //Total elements at the album.

        //echo "<a href='$page'>Back to albums</a>";
    }
}

?>

どんな助けでも大歓迎です!

よろしくお願いします!

4

3 に答える 3

0

一般的なアプローチは、(現在実行している)使用可能なファイルの総数をカウントすることです。次に、表示するページごとのファイルの数を決定します(この場合は5)。カウントをその値で割ってページごとに表示し、必要なページ数(つまり、「1,2,3、next」の出力を決定する)を決定します。次に、1、2、3の各リンクを作成し、次のリンクをパラメーターを渡して同じページに戻します。たとえば、2ページ目のリンクは次のようになります。/yourscript.php?page=2

次に、ページオフセットを使用して、ファイル配列内のどこに出力されるかを確認します。したがって、ページ= 2の場合の例から、配列オフセット5を頼りに始めます(ファイル0〜4が最初のページにあるため)。

于 2012-08-13T17:10:17.500 に答える
0

DirectoryIteratorLimitIteratorは私の新しい親友ですが、globより簡単にプレフィルターをかけるようです。カスタムを作成することもできますFilterIterator。PHP>5.1が必要だと思います。

プレフィルターなし:

$dir_iterator = new DirectoryIterator($dir);
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);

グロブプレフィルター:

$dir_glob = $dir . '/*.{jpg,gif,png}';

$dir_iterator = new ArrayObject(glob($dir_glob, GLOB_BRACE));
$dir_iterator = $dir_iterator->getIterator();
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);

次に、あなたのことをしてください:

foreach ($paginated as $file) { ... }

このDirectoryIterator例の場合、はの$fileインスタンスになりますが、例は単なるディスクパスであることに注意してください。SplFileInfoglob

于 2013-01-31T02:20:54.297 に答える
0

これを試して: -

出力

ここに画像の説明を入力

<?php

$maindir = "img" ;
$mydir = opendir($maindir) ;
$limit = 5;
$offset = ((int)$_GET['offset']) ? $_GET['offset'] : 0; 
$files = array();
$page='';
$exclude = array( ".", "..", "index.php",".htaccess","guarantee.gif") ;
while($fn = readdir($mydir))
{
    if (!in_array($fn, $exclude)) 
    {
        $files[] = $fn;;
    }
}
closedir($mydir);
sort($files);
$newICounter = (($offset + $limit) <= sizeof($files)) ? ($offset + $limit) : sizeof($files);

for($i=$offset;$i<$newICounter;$i++) {  
?>
    <a href="<?php print $files[$i]; ?>"><?php print $files[$i]; ?></a><br>
<?php
}
freddyShowNav($offset,$limit,sizeof($files),"");

function freddyShowNav($offset, $limit, $totalnum, $query) {
    global $PHP_SELF;
    if ($totalnum > $limit) {
            // calculate number of pages needing links 
            $pages = intval($totalnum/$limit);

            // $pages now contains int of pages needed unless there is a remainder from division 
            if ($totalnum%$limit) $pages++;

            if (($offset + $limit) > $totalnum) {
                $lastnum = $totalnum;
                }
            else {
                $lastnum = ($offset + $limit);
                }
            ?>
                <table cellpadding="4"><tr><td>Page </td>
            <?php
            for ($i=1; $i <= $pages; $i++) {  // loop thru 
                $newoffset=$limit*($i-1);
                if ($newoffset != $offset) {
            ?>
                    <td>
                        <a href="<?php print  $PHP_SELF; ?>?offset=<?php print $newoffset; ?><?php print $query; ?>"><?php print $i; ?>
                        </a>
                    </td>
            <?php
                    }     
                else {
            ?>
                    <td><?php print $i; ?></td>
            <?php
                    }
                }
            ?>
                    </tr></table>
            <?php
        }
    return;
    }



echo $page;
?>
于 2012-08-13T17:41:27.993 に答える