PHP分页原理

分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解。

一、分页原理:

       所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:
       每页多少条记录($PageSize)?
       当前是第几页($CurrentPageID)?
       现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
       至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。
       以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。

       前10条记录:select * from table limit 0,10
       第11至20条记录:select * from table limit 10,10
       第21至30条记录:select * from table limit 20,10……
        这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
        select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
        拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。

二、分页代码说明:

class PageController {

    private $page; //当前页
    private $pagenum; //总页数

//    <a href="#" class="nobr">共33页</a>

    public function __construct($page, $pagenum,$url) {
        $this->page = $page;
        $this->pagenum = $pagenum;
        $this->url=$url;
    }

    //首页
    private function first() {

        if ($this->page == 1) {
            @$html.='<a href="#" class="nobr">1</a>';
        } else {
            @$html.='<a href="' . U($this->url, array('page' => $this->page)) . '" class="nobr" >' . $this->page . '</a>';
        }
        return $html;
    }

    //上一页
    private function prev() {
        $html = '<div class="page">';
        if ($this->page == 2) {
            @$html.='<a href="' . U($this->url) . '">上一页</a>';
        } else {
            @$html.='<a href="' . U($this->url, array('page' => $this->page - 1)) . '">上一页</a>';
        }
        return $html;
    }

    //下一页
    private function next() {
        if ($this->page == $this->pagenum) {
            @$html.='<a href="' . U($this->url, array('page' =>$this->pagenum)) . '" class="pink">下一页</a>';
        } else {
            @$html.='<a href="' . U($this->url, array('page' => $this->page + 1)) . '"  class="pink">下一页</a>';
        }
        return $html;
    }

    //尾页
    private function last() {
        if ($this->page == $this->pagenum) {
            @$html.='<a  class="nobr">共' . $this->pagenum . '页</a>  <a  class="input"><input type="text" class="page"  name="page"></a><a id="get_page" class="pink">跳转</a>  </div>';
        } else {
            @$html.='<a class="nobr">共' . $this->pagenum . '页</a>    <a class="input"><input type="text"  class="page"  name="page"></a><a  id="get_page" class="pink">跳转</a>  </div>';
        }

        return $html;
    }
    public function pagelist() {
        return array('prev' => $this->prev(), 'first' => $this->first(), 'next' => $this->next(), 'last' => $this->last());
    }

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值