php tp框架分页源代码,ThinkPHP实现分页功能

前几篇(上传,缩略图,验证码,自动验证表单)文章介绍的功能实现都是基于ThinkPHP框架封装好的类进行实现的,所以这次自己写一个分页类在框架中使用。

首先在根目录建一个Tools文件夹,在Tools文件夹下建Page.class.php类文件,这样以后自定义的工具类都可放在Tools文件夹下。

此类封装有以下函数:获取请求地址,开始页,从哪一条显示,结束页 从哪一条结束,页码列表(首页超链接,上一页,页码数字列表超链接,下一页,尾页,跳转),对于分页足够使用!

下面是Page.class.php代码

//命名空间的名称与上级目录tools一致

//原因:当前Page.class.php类文件会被自动加载机制引入

// 在引入的同时会把"tools"变为文件的上级目录,进而获得该Page类文件

namespace Tools;

class Page {

private $total; //数据表中总记录数

private $listRows; //每页显示行数

private $limit;

private $uri; //当前链接URL

private $pageNum; //页数

private $config=array('header'=>"个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页");

private $listNum=8; //限制页码列表数目

/*

* $total 总记录数

* $listRows 每页显示行数

*/

public function __construct($total, $listRows=10, $pa=""){

$this->total=$total; //数据表中总记录数

$this->listRows=$listRows; //设置每页显示行数

$this->uri=$this->getUri($pa); //请求地址

$this->page=!empty($_GET["page"]) ? $_GET["page"] : 1; //当前页

$this->pageNum=ceil($this->total/$this->listRows); //总页数

$this->limit=$this->setLimit(); //限制每页长度

}

private function setLimit(){

return "Limit ".($this->page-1)*$this->listRows.", {$this->listRows}";

}

//请求地址

private function getUri($pa){

$url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], '?')?'':"?").$pa;

$parse=parse_url($url);

if(isset($parse["query"])){

parse_str($parse['query'],$params);

unset($params["page"]);

$url=$parse['path'].'?'.http_build_query($params);

}

return $url;

}

function __get($args){

if($args=="limit")

return $this->limit;

else

return null;

}

//开始页,从哪一条显示

private function start(){

if($this->total==0)

return 0;

else

return ($this->page-1)*$this->listRows+1;

}

//从哪一条结束

private function end(){

return min($this->page*$this->listRows,$this->total);

}

//首页超链接

private function first(){

$html = "";

if($this->page==1)

$html.='';

else

$html.="  {$this->config["first"]}  ";

return $html;

}

//上一页

private function prev(){

$html = "";

if($this->page==1)

$html.='';

else

$html.="  {$this->config["prev"]}  ";

return $html;

}

//页码数字列表超链接

private function pageList(){

$linkPage="";

$inum=floor($this->listNum/2);

for($i=$inum; $i>=1; $i--){

$page=$this->page-$i;

if($page<1)

continue;

$linkPage.=" {$page} ";

}

$linkPage.=" {$this->page} ";

for($i=1; $i<=$inum; $i++){

$page=$this->page+$i;

if($page<=$this->pageNum)

$linkPage.=" {$page} ";

else

break;

}

return $linkPage;

}

//下一页

private function next(){

$html = "";

if($this->page==$this->pageNum)

$html.='';

else

$html.="  {$this->config["next"]}  ";

return $html;

}

//尾页

private function last(){

$html = "";

if($this->page==$this->pageNum)

$html.='';

else

$html.="  {$this->config["last"]}  ";

return $html;

}

//跳转

private function goPage(){

return '    ';

}

//页码列表

function fpage($display=array(0,1,2,3,4,5,6,7,8)){

$html[0]="  共有{$this->total}{$this->config["header"]}  ";

$html[1]="  每页显示".($this->end()-$this->start()+1)."条,本页{$this->start()}-{$this->end()}条  ";

$html[2]="  {$this->page}/{$this->pageNum}页  ";

$html[3]=$this->first();

$html[4]=$this->prev();

$html[5]=$this->pageList();

$html[6]=$this->next();

$html[7]=$this->last();

$html[8]=$this->goPage();

$fpage='';

foreach($display as $index){

$fpage.=$html[$index];

}

return $fpage;

}

}

控制器代码:

//商品列表

function showlist(){

//实现分页效果

$goods = D('goods');

//① 获得数据的总记录条数

$total = $goods -> count(); //select count(*) from sw_goods;

$per = 7; //每页显示7条记录

//②实例化分页类

$page_obj = new \Tools\Page($total, $per);

//③自定义sql语句,获取每页信息

$sql = "select * from sw_goods order by goods_id desc ".$page_obj->limit;

$info = $goods->query($sql);

//④获取页码列表

$pagelist = $page_obj->fpage(array(3,4,5,6,7,8));

//分配

$this->assign('pagelist',$pagelist);

$this->assign('info',$info);

$this->display();

}

前台显示代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值