thinkPHP3.2实现分页自定义样式的方法
本文实例讲述了thinkPHP3.2实现分页自定义样式的方法。分享给大家供大家参考,具体如下:
下面是一个Tp3.2的自定义分页,这个方法也是在看过一个网友的博客之后受到启发这么写的。经过了一些修改,大家在看到代码之后也可以进行修改自定义样式;
主要的样式控制文件就是page.css,框架底层的分页类可以直接进行粘贴复制使用;
1.框架底层的page.class.php路径(Engine\Library\Think)
其实这个文件不需要过多修改,也可以直接使用官方的就行;下面是我现在用的,稍作了修改;
'共%TOTAL_ROW%条记录', 'prev'=>'<<', 'next'=>'>>', 'first'=>'1...', 'last'=>'...%TOTAL_PAGE%', 'theme'=>'%FIRST%%UP_PAGE%%LINK_PAGE%%DOWN_PAGE%%END%', ); /** *架构函数 *@paramarray$totalRows总的记录数 *@paramarray$listRows每页显示记录数 *@paramarray$parameter分页跳转的参数 */ publicfunction__construct($totalRows,$listRows=20,$parameter=array()){ C('VAR_PAGE')&&$this->p=C('VAR_PAGE');//设置分页参数名称 /*基础设置*/ $this->totalRows=$totalRows;//设置总记录数 $this->listRows=$listRows;//设置每页显示行数 $this->parameter=empty($parameter)?$_GET:$parameter; $this->nowPage=empty($_GET[$this->p])?1:intval($_GET[$this->p]); $this->firstRow=$this->listRows*($this->nowPage-1); } /** *定制分页链接设置 *@paramstring$name设置名称 *@paramstring$value设置值 */ publicfunctionsetConfig($name,$value){ if(isset($this->config[$name])){ $this->config[$name]=$value; } } /** *生成链接URL *@paraminteger$page页码 *@returnstring */ privatefunctionurl($page){ returnstr_replace(urlencode('[PAGE]'),$page,$this->url); } /** *组装分页链接 *@returnstring */ publicfunctionshow(){ if(0==$this->totalRows)return''; /*生成URL*/ $this->parameter[$this->p]='[PAGE]'; $this->url=U(ACTION_NAME,$this->parameter); /*计算分页信息*/ $this->totalPages=ceil($this->totalRows/$this->listRows);//总页数 if(!empty($this->totalPages)&&$this->nowPage>$this->totalPages){ $this->nowPage=$this->totalPages; } /*计算分页零时变量*/ $now_cool_page=$this->rollPage/2; $now_cool_page_ceil=ceil($now_cool_page); $this->lastSuffix&&$this->config['last']=$this->totalPages; //上一页 $up_row=$this->nowPage-1; $up_page=$up_row>0?' url($up_row).'"rel="externalnofollow">'.$this->config['prev'].'':''; //下一页 $down_row=$this->nowPage+1; $down_page=($down_row<=$this->totalPages)?' url($down_row).'"rel="externalnofollow">'.$this->config['next'].'':''; //第一页 $the_first=''; if($this->totalPages>$this->rollPage&&($this->nowPage-$now_cool_page)>=1){ $the_first=' url(1).'"rel="externalnofollow">'.$this->config['first'].''; } //最后一页 $the_end=''; if($this->totalPages>$this->rollPage&&($this->nowPage+$now_cool_page)<$this->totalPages){ $the_end=' url($this->totalPages).'"rel="externalnofollow">'.$this->config['last'].''; } //数字连接 $link_page=""; for($i=1;$i<=$this->rollPage;$i++){ if(($this->nowPage-$now_cool_page)<=0){ $page=$i; }elseif(($this->nowPage+$now_cool_page-1)>=$this->totalPages){ $page=$this->totalPages-$this->rollPage+$i; }else{ $page=$this->nowPage-$now_cool_page_ceil+$i; } if($page>0&&$page!=$this->nowPage){ if($page<=$this->totalPages){ $link_page.=' url($page).'"rel="externalnofollow">'.$page.''; }else{ break; } }else{ if($page>0&&$this->totalPages!=1){ $link_page.=' '.$page.''; } } } //替换分页内容 $page_str=str_replace( array('%HEADER%','%NOW_PAGE%','%UP_PAGE%','%DOWN_PAGE%','%FIRST%','%LINK_PAGE%','%END%','%TOTAL_ROW%','%TOTAL_PAGE%'), array($this->config['header'],$this->nowPage,$up_page,$down_page,$the_first,$link_page,$the_end,$this->totalRows,$this->totalPages), $this->config['theme']); return" {$page_str}"; } }
2.控制器,随便写个demo。
publicfunctionindex(){ $obj=M("news"); $count=$obj->where('status=1andclassID=74')->count();//查询满足要求的总记录数 $limit=10; $Page=new\Think\Page($count,$limit);//实例化分页类传入总记录数和每页显示的记录数(25) $show=$Page->show();//分页显示输出 $list=$obj->where('status=1andclassID=74')->order('writetimedesc')->limit($Page->firstRow.','.$Page->listRows)->select(); $firstlist=$obj->where('status=1andclassID=74andIndexfirst=1')->order('writetimedesc')->limit(4)->select(); $this->assign('firstlist',$firstlist); $this->assign('page',$show);//赋值分页输出 $this->assign('list',$list); $this->display(); }
3.接下来是View层,样式控制。page.css文件
.b-page{ background:#fff; box-shadow:0px1px2px0px#E2E2E2; } .page{ width:100%; background:#FFF; text-align:center; overflow:hidden; font-size:14px; margin-top:50px; } .page.first, .page.prev, .page.current, .page.num, .page.current, .page.next, .page.end{ padding:8px16px; margin:0px5px; display:inline-block; color:#144970; border:1pxsolid#F2F2F2; border-radius:5px; } .page.first:hover, .page.prev:hover, .page.current:hover, .page.num:hover, .page.current:hover, .page.next:hover, .page.end:hover{ text-decoration:none; background:#F8F5F5; } .page.current{ background-color:#144970; color:#FFF; border-radius:5px; } .page.current:hover{ text-decoration:none; background:#144970; } .page.not-allowed{ cursor:not-allowed; }
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《ZendFrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。