PHP分页原理

来源:互联网 发布:linux驱动书籍 编辑:程序博客网 时间:2024/06/04 23:30
分页显示是一种非常常见的浏览和显示大量数据的方法,属于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());    }}




原创粉丝点击