ThinkPHP的使用(三)带查询条件的分页

栏目: PHP · 发布时间: 7年前

内容简介:ThinkPHP的使用(三)带查询条件的分页

本篇文章主要安利一个好看的ThinkPHP分页类,以及带查询条件的列表分页展示,参考的是白俊遥大神的博客

1.  首先导入分页类到ThinkPHP->Library->Org->hmy->Page.class.PHP,代码如下:

<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn> // +---------------------------------------------------------------------- /*  * PHP分页类  * 修改者:白俊遥  * 日  期:2015.5.10  * 邮  箱:baijunyao@baijunyao.com  * 博  客:http://baijunyao.com  */ namespace Org/hmy;  class Page{     public $firstRow; // 起始行数     public $listRows; // 列表每页显示行数     public $parameter; // 分页跳转时要带的参数     public $totalRows; // 总行数     public $totalPages; // 分页总页面数     public $rollPage   = 5;// 分页栏每页显示的页数     public $lastSuffix = true; // 最后一页是否显示总页数      private $p       = 'p'; //分页参数名     private $url     = ''; //当前链接URL     private $nowPage = 1;      // 分页显示定制     private $config  = array(         'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',         'first'   => '首页',         'prev'   => '上一页',         'next'   => '下一页',         'last'   => '末页',         'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%',     );      /**      * 架构函数      * @param array $totalRows  总的记录数      * @param array $listRows  每页显示记录数      * @param array $parameter  分页跳转的参数      */     public function __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->nowPage    = $this->nowPage>0 ? $this->nowPage : 1;         $this->firstRow   = $this->listRows * ($this->nowPage - 1);     }      /**      * 定制分页链接设置      * @param string $name  设置名称      * @param string $value 设置值      */     public function setConfig($name,$value) {         if(isset($this->config[$name])) {             $this->config[$name] = $value;         }     }      /**      * 生成链接URL      * @param  integer $page 页码      * @return string      */     private function url($page){         return str_replace(urlencode('[PAGE]'), $page, $this->url);     }      /**      * 组装分页链接      * @return string      */     public function show() {         if(0 == $this->totalRows) return '';          /* 生成URL */         $this->parameter[$this->p] = '[PAGE]';         $this->url = U(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.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);          //上一页         $up_row  = $this->nowPage - 1;         $up_page = $up_row > 0 ? '<a class="prev" href="' . $this->url($up_row) . '">' . $this->config['prev'] . '</a>' : '<a class="prev not-allowed" href="javascript:;">' . $this->config['prev'] . '</a>';          //下一页         $down_row  = $this->nowPage + 1;         $down_page = ($down_row <= $this->totalPages) ? '<a class="next" href="' . $this->url($down_row) . '">' . $this->config['next'] . '</a>' : '<a class="next not-allowed" href="javascript:;">' . $this->config['next'] . '</a>';          //第一页         $the_first = '<a class="first" href="' . $this->url(1) . '">' . $this->config['first'] . '</a>';          //最后一页         $the_end = '<a class="end" href="' . $this->url($this->totalPages) . '">' . $this->config['last'] . '</a>';          //数字连接         $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) {                 if($page != $this->nowPage){                     if($page <= $this->totalPages){                         $link_page .= '<a class="num" href="' . $this->url($page) . '">' . $page . '</a>';                     }else{                         break;                     }                 }else{                     $link_page .= '<span class="current">' . $page . '</span>';                 }                             }          }          //替换分页内容         $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 '<div class="page">'.$page_str.'</div>';     } }

直接复制过去即可

2.在需要展示的模板里导入page.CSS文件

.b-page {   background: #fff;   box-shadow: 0px 1px 2px 0px #E2E2E2; } .page {   width: 100%;   padding: 30px 15px;   background: #FFF;   text-align: center;   overflow: hidden; } .page .first, .page .prev, .page .current, .page .num, .page .current, .page .next, .page .end {   padding: 8px 16px;   margin: 0px 5px;   display: inline-block;   color: #008CBA;   border: 1px solid #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: #008CBA;   color: #FFF;   border-radius: 5px;   border: 1px solid #008CBA; } .page .current:hover {   text-decoration: none;   background: #008CBA; } .page .not-allowed {   cursor: not-allowed; }

注意:因为page类里已经封装好了class为page的样式,所以不需要额外的再添加div了

接下来就是分页类的使用了,跟ThinkPHP自带的分页类使用方法一致,这里附上ThinkPHP3.2的开发手册

ThinkPHP3.2在线开发手册

下面介绍带查询条件的分页列表展示,大家也可以了解这个分页类的使用

showlist模板页搜索框

<div class="div_search" >    <span>        <form action="{:U('search')}" method="get">            <select name="choose" style="width: 100px;height: 25px;">                <option selected="selected" value="news_title">标题</option>                <option value="news_author">作者</option>                <option value="news_content">内容</option>            </select>            <input type="text" name="content" style="height: 19px;">            <input value="查询" type="submit" />        </form>    </span> </div>

注意:一定要用get方式查询,不然会导致查询结果从第二页开始,不会将查询结果带入过来,而显示全部的数据

操作方法

//查询 public function search(){     $news=new /Model/NewsModel();     //获取查询的条件     $choose=$_GET['choose'];     $content=$_GET['content'];     //查询条件     $map[$choose]=array("like","%".$content."%");     $indexpage=I("p",1,"int");      $limit=7;     //查询满足要求的总记录数     $total=$news->where($map)->count();          //实例化page类     $page=new /Org/hmy/Page($total,$limit);     //分页跳转的时候保证查询条件     foreach($map as $k=>$v){         $page->parameter[$k]=urlencode($v[1]);     }          $pagelist=$page->show();//分页显示输出;     $pageinfo=$news->where($map)->page($indexpage,$limit)->select();        $this->assign('pageinfo',$pageinfo);     $this->assign('pagelist',$pagelist);      $this->assign('total',$total);      $this->display();   }

显示效果如下所示

ThinkPHP的使用(三)带查询条件的分页

效果图


以上所述就是小编给大家介绍的《ThinkPHP的使用(三)带查询条件的分页》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Mechanics of Web Handling

The Mechanics of Web Handling

David R. Roisum

This unique book covers many aspects of web handling for manufacturing, converting, and printing. The book is applicable to any web including paper, film, foil, nonwovens, and textiles. The Mech......一起来看看 《The Mechanics of Web Handling》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具