从目录中分页列出的文件

时间:2012-08-13 17:04:02

标签: php html

我是网页编码的新手,我遇到了问题......

现在我可以添加一个代码,列出并回显目录中的图像,并用灯箱显示它们。

现在代码显示目录中的所有图像,以5行图像为单位,但没有限制......

我怎样才能将代码更改为页面结果,例如:只需一行,每页有5张图像。然后显示通常的“页面:1,2,3 ...下一个......”我真的不知道该怎么做......我一直在尝试很多事情但没有成功......

代码如下:

<?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>";
    }
}

?>

任何帮助将不胜感激!

非常感谢提前!!

3 个答案:

答案 0 :(得分:0)

一般方法是计算可用文件的总数(您当前正在进行的操作)。然后决定你将要显示的每页文件(在你的情况下为5)。将计数除以该值以显示每页以确定需要多少页(即“1,2,3,下一个”输出应该是什么)。然后让1,2,3的每个链接,下一个链接返回到传递参数的同一页面。例如,第2页的链接可能是/yourscript.php?page=2

然后,您将使用页面偏移量来了解文件数组中的输出位置。因此,从示例中,如果page = 2,您将开始依靠数组偏移量5(因为文件0-4在第一页上)。

答案 1 :(得分:0)

试试这个: -

输出

enter image description here

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

答案 2 :(得分:0)

DirectoryIteratorLimitIterator是我最好的朋友,虽然glob似乎更容易预先过滤。您还可以编写自定义FilterIterator。需要PHP&gt; 5.1,我想。

没有前置过滤器:

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

Glob prefilter:

$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将是SplFileInfo的实例,而glob示例只是磁盘路径。