我刚刚找到了一个分页功能来显示文件夹中的图像页面,但是当分页时,最后几页似乎是空的,我不想要这个。下面是我正在使用的代码:
<?php
function show_pagination($current_page, $last_page){
echo '<br><div>';
echo ' <button type="button"><a href="?page=1">First Page</a></button> ';
echo ' <button type="button"><a href="?page='.$last_page.'">Last Page</a></button> ';
if( $current_page > 1 ){
echo ' <button type="button"><a href="?page='.($current_page-1).'"><<Previous</a></button> ';
}
for($i = 1; $i <= $last_page; $i++){
echo ' <button type="button"><a href="?page='.$i.'">'.$i.'</a></button> ';
}
if( $current_page < $last_page ){
echo ' <button type="button"><a href="?page='.($current_page+1).'">Next>></a></button> ';
}
echo '</div><br>';
echo '<div><p>Page '.$current_page.' out of '.$last_page.'</p></div><br>';
}
$folder = 'images/';
$filetype = '*.*';
$files = glob($folder.$filetype);
$total = count($files);
$per_page = 20;
$last_page = (int)($total / $per_page);
if(isset($_GET["page"]) && ($_GET["page"] <=$last_page) && ($_GET["page"] > 0) ){
$page = $_GET["page"];
$offset = ($per_page + 1)*($page - 1);
}else{
//echo "Page out of range showing results for page one";
$page=1;
$offset=0;
}
$max = $offset + $per_page;
if($max>$total){
$max = $total;
}
show_pagination($page, $last_page);
for($i = $offset; $i< $max; $i++){
$file = $files[$i];
$path_parts = pathinfo($file);
$filename = $path_parts['filename'];
echo "<img src='$file' alt='$filename' style='border-style: solid;border-width: 2px;border-color: #4d94ff; margin: 5px'>";
}
show_pagination($page, $last_page);
?>
任何帮助解决这个小问题的人都将不胜感激。然而,我计算的最后一页似乎在某些情况下工作,但并不是在所有情况下工作,我不确定为什么。
发布于 2018-07-25 08:36:06
我相当肯定问题出在你的offset - $offset = ($per_page + 1)*($page - 1)
上。
请记住,每个页面将向显示20个项,而不是21个。对于第一页,您需要一个1
的索引。第二个是21
。第三个是41
。诸若此类。
因此,您只需要在计算页面本身的之后添加一个。要实现这一点,您可能需要以下内容:
$offset = ($per_page * ($page - 1)) + 1;
这等同于:
$offset = (20 * (1 - 1)) + 1; /* 1 for page 1 */
$offset = (20 * (2 - 1)) + 1; /* 21 for page 2 */
$offset = (20 * (3 - 1)) + 1; /* 41 for page 3 */
https://stackoverflow.com/questions/51509243
复制相似问题