我使用我的MySQL数据库完成了这项工作,但大约一年前,我将我的网站改为更方便的编码布局,用于我的摄影缩略图。其他人编写了代码,它使用opendir功能根据特定文件夹中的图像文件自动创建缩略图。
问题是,如果我有一个包含100多个图像的图库,它会在页面上加载所有图像,用户无法选择要查看的内容,直到它们全部加载完毕。
我想创建分页,例如,一次加载15,然后允许用户转到其他页面(如果有的话)。这段代码是我脑子里写的,因为我是PHP的新手。
以下是我认为需要更新的相关代码:
$dir = $dir.$gallery."/";
//Put files into an array
// create a handler to the directory
$dirhandler = opendir($dir);
// read all the files from directory
$nofiles=0;
while ($file = readdir($dirhandler)) {
// if $file isn't this directory or its parent
//add to the $files array
if ($file != '.' && $file != '..')
{
$nofiles++;
$files[$nofiles]=$file;
}
}
//close the handler
closedir($dirhandler);
// sort folder names alphabetically, ignore case
natcasesort($files);
?>
<div style="clear:both"></div>
<?
//Show images
foreach ($files as $file){
if ($file!="."&&$file!="..")
{
$extention = explode('.', $file);
if ($extention[1] != "")
{
echo "<div class='imgwrapper'>";
echo"<a class='fancybox' rel='group' href='$dir$file' return='false' title='$filename'>";
echo "<img src='timthumb.php?src=$dir$file&h=$height&w=$width' alt='$extention[0]' width='$width' height='$height'>";
echo"</a><br>";
echo "</div>";
}
}
}
?>
这可能不是一切。老实说,我愿意付钱给别人为我做这件事。我不知道它有多难或多么容易。如有必要,我可以发送整个页面或复制整个代码。
昨天我花了7个小时尝试将我的网站转换为WordPress布局,其中有一个已经执行此操作的网络库插件,但移动布局很乱,而且比这个代码已经轻松实现的要复杂得多。
我认为我现在的网站外观和效果都很好,但这种分页是唯一缺少的。
答案 0 :(得分:0)
您似乎已经完成了大部分工作,并且您已经存储了对数组中文件的引用,因此您应该能够使用slice方法根据需要检索数组的某些部分。伪代码给你的想法:
$total_to_display=10;
$pn=$_GET['pn'];
$preserve=true;
$slice=array_slice( $files, $pn, $total_to_display, $preserve );
foreach( $slice as $key => $file ) echo "<img src='$file' />";
从上面开始,这是一个有效的测试版本 - 虽然可能有一些需要注意的事情,因为它没有经过严格的测试!
define('ROOT','c:/wwwroot' );
$dir='/images/gallery/loch_clunie_April07';
$fullpath=realpath( ROOT . $dir );
$files=array();
if( $fullpath ){
/* Find jpg, png and gif images in nominate directory */
$filepaths=preg_grep( '@\.jpg|\.png|\.gif@i', glob( $fullpath . '/*' ) );
/* Prepare an array to hold data about each image in directory */
foreach( $filepaths as $path ){
$info=(object)pathinfo( $path );
list( $width, $height, $type, $attr ) = getimagesize( $path );
$files[]=array( 'name'=>$info->basename, 'dir'=>$dir, 'ext'=>$info->extension, 'size'=>filesize( $path ), 'created'=>filectime( $path ), 'width'=>$width, 'height'=>$height );
}
/* Set default values to prevent errors */
$tR=0;
$mR=0;
$tP=0;
$pN=0;
/* Number of images to display */
$mR=15;
/* Total number of images found in directory */
$tR=count( $files );
/* Current page number */
$pN=isset( $_GET['pN'] ) ? filter_var( filter_input( INPUT_GET, 'pN', FILTER_SANITIZE_NUMBER_INT ), FILTER_VALIDATE_INT ) : 0;
/* Determine number of pages */
$tP=( $mR > 0 ) ? abs( ceil( $tR / $mR ) - 1 ) : 0;
/* Ensure that the page number is valid based upon number of records to display AND number of images found */
if( abs( $mR * $pN ) > $tR-1 ) $pN=0;
$slice=array_slice( $files, abs( $pN * $mR ), $mR, false );
foreach( $slice as $key => $array ){
$img=(object)$array;
echo "
<div class='imgwrapper'>
<a class='fancybox' rel='group' href='{$img->dir}{$img->name}' return='false' title='{$img->name}'>";
/* Replace the following with your timthumb code */
echo "
<img src='{$img->dir}/{$img->name}' />";
/*
echo "
<img src='timthumb.php?src={$img->dir}{img->name}&h={$img->height}&w={$img->width}' alt='{$img->ext}' width='{$img->width}' height='{$img->height}'>";
*/
echo "
</a>
</div>";
}
/* Display pagination links - You might wish to prefix the actual links with the path to the gallery page rather than just ?pN=X etc */
if( $tP > 0 && $tR > $mR ){
echo "<div class='rspaging'>";
if( $pN==0 ) echo "<div id='paging_first'>First</div>";
else echo "<a href='?pN=0'>First</a>";
if( $pN > 0 ) echo "<a href='?pN=".max( 0, $pN - 1 )."'>Previous</a>";
else echo "<div id='paging_previous'>Previous</div>";
if( ( $pN + 1 ) > $tP ) echo "<div id='paging_next'>Next</div>";
else echo "<a href='?pN=".min( $tP, $pN + 1 )."'>Next</a>";
if( $pN==$tP ) echo "<div id='paging_last'>Last</div>";
else echo "<a href='?pN={$tP}'>Last</a>";
echo "</div>";
}
}
答案 1 :(得分:0)
好的,你需要计算你拥有的文件数量
$fi = new FilesystemIterator(__DIR__, FilesystemIterator::SKIP_DOTS);
//if doesnt work replace __DIR__ with the path to your gallery
$amountfile = (int) iterator_count($fi);
// $amountfile is the number of file you got in one directory
$amountpage = (int) $amountfile / 15
// this number will tell us how much page with 15 pictures you gonna have
在页面的末尾,我们需要创建一个小表单才能访问其他页面
<form action="THISFILE.php" method="GET">
<?php
for($i=0; $i<= $amountfile, $i++){
echo "<input type="submit" name='page' value=";
echo $i;
echo "'>";
}
?>
</form>
这将重新加载文件并通过GET页面的编号。接下来,您必须使用以下代码拦截GET
if($_GET['page'])
{
$choice = (int) $_GET['page'];
$page = ($choice -1) * 15;
}
else
{
// in case we have not clicked on a specific page there is no GET
$page = 0;
}
然后我们只需要修改你的循环,这样它就只会显示15张图片,具体取决于你的页面选择。
所以想象你点击页面“2”它会做 - &gt; (2-1)* 15
因此,您的$页面将为15,因此只有在我们通过de循环15次后才开始显示图片,它将进一步停止15个循环。
在你给我们的下一个循环中,如果你看一下,我会放入另一个小的 循环结束你会看到$ number ++。每次运行循环时,$ number增加1。它只显示之间的图像 15和15 + 15(30)
$number = 0;
foreach ($files as $file){
if($number > $page && $number < $page + 15){
if ($file!="."&&$file!="..")
{
$extention = explode('.', $file);
if ($extention[1] != "")
{
echo "<div class='imgwrapper'>";
echo"<a class='fancybox' rel='group' href='$dir$file' return='false' title='$filename'>";
echo "<img src='timthumb.php?src=$dir$file&h=$height&w=$width' alt='$extention[0]' width='$width' height='$height'>";
echo"</a><br>";
echo "</div>";
}
elseif($number > $page + 15)
{
// this stop the loop while you have showed your 15 pictures
break;
}
$number++
}
}
}
我没有尝试过,但我希望你能得到一般的想法。