建站软件 优化软件 编程软件 网页辅助 站群程序 网站程序 图像处理 资源教程 字体下载 推荐软件


您的位置:首页 > PHP学习 > php怎么实现网站分页

php怎么实现网站分页

时间:2015-01-29 15:23:38  来源:免费模板网 作者:风雪 阅读次数 tagsphp怎么实现网站分页

    有时候网站数据过多那么这时候就需要分页了,那么分页的原理是什么呢?


这样才能知道分几页。
比如说一个列表结果是126行,如果一页20行的话那么分7页,对吧。
我们的代码经理是这样的:
计算总行数:select count(*) from tablename where …..
查询列表select * from tablename where … limit…
我们看这种方式再没有任何优化的方式下这样第个列表都是再次查询。
首先我们假设数据更新频率不是很高的情况下,我们点第1页,第2页 。。。第n页 其实第一句sql得到的都是同一个结果,这样是不是后面都在做重复工作呢。那我们第1页得到结果数后是不是可以将结果一下传递下去就行了。
例如我们分页链接第2页是这样的 list.php?page=2&count=126
在程序上加一个判断:
 
1.if ($_get['count']) {
2.$count = $_get['count'];
3.} else {
4.$count =select count(*) from tablename where …..
5.}

这样优化以后如果我们只有第一页才计算总数,后面的页数都不用了,这样是不是就可以提升了效率。
还有这么种情况,也就是在模糊查询的情况下,我们有一个应用,我估计大部分查询结果数小于20,也就是都只有一页结果,那么如果都去计算总数是没有必要的,而且模糊查询效率也比较低。所以我突然想到跳出原来的思维,为什么一定要先计算总行数,再取列表呢?
其实完全可以先查询列表,如果列表结果数=20,那么我们再查询总行数,因为小于20的话,其实只有一页。总行数就等于查出来的列表结果数。
伪代码为:
 
01.if ($_get['page']<2) {
02.$list = select * from tablename where … limit 0,20  第一页时直接查询前20条
03.if (count($list)=20) {
04.$count =select count(*) from tablename where …..
05.} else {
06.$count =count($list);
07.}
08.} else {
09.$count = $_get['count'];
10.$list = select * from tablename where … limit page-1*20,page-1*20+20
11.}

下面封装了一个function 可以供读者参考

/**
  * 获取分页的HTML内容
  * @param integer $page 当前页
  * @param integer $pages 总页数
  * @param string $url 跳转url地址    最后的页数以 '&page=x' 追加在url后面
  *
  * @return string HTML内容;
  */
public static
function getPageHtml($page, $pages, $url) {
    //最多显示多少个页码
    $_pageNum = 5;
    //当前页面小于1 则为1
    $page = $page < 1 ? 1 : $page;
    //当前页大于总页数 则为总页数
    $page = $page > $pages ? $pages: $page;
    //页数小当前页 则为当前页
    $pages = $pages < $page ? $page: $pages;

    //计算开始页
    $_start = $page - floor($_pageNum / 2);
    $_start = $_start < 1 ? 1 : $_start;
    //计算结束页
    $_end = $page + floor($_pageNum / 2);
    $_end = $_end > $pages ? $pages: $_end;

    //当前显示的页码个数不够最大页码数,在进行左右调整
    $_curPageNum = $_end - $_start + 1;
    //左调整
    if ($_curPageNum < $_pageNum && $_start > 1) {
        $_start = $_start - ($_pageNum - $_curPageNum);
        $_start = $_start < 1 ? 1 : $_start;
        $_curPageNum = $_end - $_start + 1;
    }
    //右边调整
    if ($_curPageNum < $_pageNum && $_end < $pages) {
        $_end = $_end + ($_pageNum - $_curPageNum);
        $_end = $_end > $pages ? $pages: $_end;
    }

    $_pageHtml = '<ul class="pagination">';
    /*if($_start == 1){
   $_pageHtml .= '<li><a title="第一页">«</a></li>';
  }else{
   $_pageHtml .= '<li><a  title="第一页" href="'.$url.'&page=1">«</a></li>';
  }*/
    if ($page > 1) {
        $_pageHtml. = '<li><a  title="上一页" href="'.$url.'&page='. ($page - 1).'">«</a></li>';
    }
    for ($i = $_start; $i <= $_end; $i++) {
        if ($i == $page) {
            $_pageHtml. = '<li class="active"><a>'.$i.'</a></li>';
        } else {
            $_pageHtml. = '<li><a href="'.$url.'&page='.$i.'">'.$i.'</a></li>';
        }
    }
    /*if($_end == $pages){
   $_pageHtml .= '<li><a title="最后一页">»</a></li>';
  }else{
   $_pageHtml .= '<li><a  title="最后一页" href="'.$url.'&page='.$pages.'">»</a></li>';
  }*/
    if ($page < $_end) {
        $_pageHtml. = '<li><a  title="下一页" href="'.$url.'&page='. ($page + 1).'">»</a></li>';
    }
    $_pageHtml. = '</ul>';
    echo $_pageHtml;
}

本文地址:https://www.freemoban.com/php/2015/0129/335.html

猜你喜欢
栏目推荐
模板推荐

Copyright:www.freemoban.com 免费模板网 All Rights Reserved 网站备案:辽ICP备19014872号-2   辽公网安备 21010602000376号  辽公网安备:42900402000182号

免责声明:本站部分资源来自互联网收集,版权归原创者所有,如果侵犯了你的权益,我们会及时删除侵权内容,联系QQ:1615187561 谢谢合作!