我是网页编码的新手,我遇到了问题......
现在我可以添加一个代码,列出并回显目录中的图像,并用灯箱显示它们。
现在代码显示目录中的所有图像,以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>";
}
}
?>
任何帮助将不胜感激!
非常感谢提前!!
答案 0 :(得分:0)
一般方法是计算可用文件的总数(您当前正在进行的操作)。然后决定你将要显示的每页文件(在你的情况下为5)。将计数除以该值以显示每页以确定需要多少页(即“1,2,3,下一个”输出应该是什么)。然后让1,2,3的每个链接,下一个链接返回到传递参数的同一页面。例如,第2页的链接可能是/yourscript.php?page=2
然后,您将使用页面偏移量来了解文件数组中的输出位置。因此,从示例中,如果page = 2,您将开始依靠数组偏移量5(因为文件0-4在第一页上)。
答案 1 :(得分: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;
?>
答案 2 :(得分:0)
DirectoryIterator
和LimitIterator
是我最好的朋友,虽然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
示例只是磁盘路径。