今天想实现博客内容的分页,想通过源代码来实现简单的分页,在网上搜索了相关原理,了解到一些内容,大致如下:
1.分页所需要的变量:
①每页多少条记录($pageSize) ;
②当前是第几页($currPage)
2.在数据库查询时要使用的关键字,order by、limit
接下来直接上代码:
返回五个页码数
function cPage($total,$pageSize,$currPage){
$max = ceil($total/$pageSize); //计算总页数
$left = max($currPage-2,1); //计算最左边的页码
$right = $left + 4; //计算最右边的页码
$right = min($max,$right);
$left = $right-4; //当页码靠近右极限时,此时的页码可能不够我们此时需要的显示的数量,需要重新判断最左边的页码。
$left = max($left,1);
for ($i=$left; $i <= $right ; $i++) { //将五个页码数放到数组里
$_GET['page'] = $i;
$pages[$i] = http_build_query($_GET); //返回可追加到url后的格式化之后的数据
}
return $pages;
}
下面我们在分页时需要用到上面的代码
$pageSql = "select count(*) from art where 1".$where;
$total = mQuery($pageSql); //获取总文章数
$total = $total[0]['count(*)'];
$pageSize = 4; //每页显示文章数
$currPage = isset($_GET['page']) ? $_GET['page'] : 1; //当前页码数,从地址栏的page中获取
$pages = cPage($total,$pageSize,$currPage);
//这是要使用到的sql语句,分页原理就是 limit(当前页的页码-1)*每页的数据数量,每页的数据数量
$sql1 = "select art_id,title,content,catname,pubtime,comm from art inner join cat on art.cat_id = cat.cat_id where 1".$where." order by art_id desc limit ". ($currPage-1)*$pageSize .",".$pageSize;
在html代码中的代码如下:
<div id="pagebar">
Pages:
<?php foreach($pages as $k=>$v){ ?>
<?php if($k == $currPage){ ?>
<?php echo $k; }else{ ?>
<a href="index.php?<?php echo $v; ?>"><?php echo $k; ?></a>
<?php } ?>
<?php } ?>
</div>
至此,一个简单的分页就完成了,当时这只是纯面向过程的实现方式,在实际工作中,需要自己将分页功能封装成分页类。这将在学习面向对象的时候进行研究
2018.7.3
网友评论