服务器之家

服务器之家 > 正文

thinkPHP3.2实现分页自定义样式的方法

时间:2019-10-26 15:24     来源/作者:谷文杰

本文实例讲述了thinkPHP3.2实现分页自定义样式的方法。分享给大家供大家参考,具体如下:

下面是一个Tp3.2的自定义分页,这个方法也是在看过一个网友的博客之后受到启发这么写的。经过了一些修改,大家在看到代码之后也可以进行修改自定义样式;

主要的样式控制文件就是page.css,框架底层的分页类可以直接进行粘贴复制使用;

1. 框架底层的page.class.php 路径( Engine\Library\Think)

其实这个文件不需要过多修改,也可以直接使用官方的就行;下面是我现在用的,稍作了修改;

  1. <?php 
  2. namespace Think; 
  3. class Page{ 
  4.   public $firstRow; // 起始行数 
  5.   public $listRows; // 列表每页显示行数 
  6.   public $parameter; // 分页跳转时要带的参数 
  7.   public $totalRows; // 总行数 
  8.   public $totalPages; // 分页总页面数 
  9.   public $rollPage  = 11;// 分页栏每页显示的页数 
  10.   public $lastSuffix = true// 最后一页是否显示总页数 
  11.   private $p    = 'p'//分页参数名 
  12.   private $url   = ''//当前链接URL 
  13.   private $nowPage = 1; 
  14.   // 分页显示定制 
  15.   private $config = array( 
  16.     'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>'
  17.     'prev'  => '<<'
  18.     'next'  => '>>'
  19.     'first' => '1...'
  20.     'last'  => '...%TOTAL_PAGE%'
  21.     'theme' => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%'
  22.   ); 
  23.   /** 
  24.    * 架构函数 
  25.    * @param array $totalRows 总的记录数 
  26.    * @param array $listRows 每页显示记录数 
  27.    * @param array $parameter 分页跳转的参数 
  28.    */ 
  29.   public function __construct($totalRows, $listRows=20, $parameter = array()) { 
  30.     C('VAR_PAGE') && $this->p = C('VAR_PAGE'); //设置分页参数名称 
  31.     /* 基础设置 */ 
  32.     $this->totalRows = $totalRows; //设置总记录数 
  33.     $this->listRows  = $listRows; //设置每页显示行数 
  34.     $this->parameter = empty($parameter) ? $_GET : $parameter; 
  35.     $this->nowPage  = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]); 
  36.     $this->firstRow  = $this->listRows * ($this->nowPage - 1); 
  37.   } 
  38.   /** 
  39.    * 定制分页链接设置 
  40.    * @param string $name 设置名称 
  41.    * @param string $value 设置值 
  42.    */ 
  43.   public function setConfig($name,$value) { 
  44.     if(isset($this->config[$name])) { 
  45.       $this->config[$name] = $value; 
  46.     } 
  47.   } 
  48.   /** 
  49.    * 生成链接URL 
  50.    * @param integer $page 页码 
  51.    * @return string 
  52.    */ 
  53.   private function url($page){ 
  54.     return str_replace(urlencode('[PAGE]'), $page, $this->url); 
  55.   } 
  56.   /** 
  57.    * 组装分页链接 
  58.    * @return string 
  59.    */ 
  60.   public function show() { 
  61.     if(0 == $this->totalRows) return ''
  62.     /* 生成URL */ 
  63.     $this->parameter[$this->p] = '[PAGE]'
  64.     $this->url = U(ACTION_NAME, $this->parameter); 
  65.     /* 计算分页信息 */ 
  66.     $this->totalPages = ceil($this->totalRows / $this->listRows); //总页数 
  67.     if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) { 
  68.       $this->nowPage = $this->totalPages; 
  69.     } 
  70.     /* 计算分页零时变量 */ 
  71.     $now_cool_page   = $this->rollPage/2; 
  72.     $now_cool_page_ceil = ceil($now_cool_page); 
  73.     $this->lastSuffix && $this->config['last'] = $this->totalPages; 
  74.     //上一页 
  75.     $up_row = $this->nowPage - 1; 
  76.     $up_page = $up_row > 0 ? '<a class="prev" href="' . $this->url($up_row) . '" rel="external nofollow" >' . $this->config['prev'] . '</a>' : ''
  77.     //下一页 
  78.     $down_row = $this->nowPage + 1; 
  79.     $down_page = ($down_row <= $this->totalPages) ? '<a class="next" href="' . $this->url($down_row) . '" rel="external nofollow" >' . $this->config['next'] . '</a>' : ''
  80.     //第一页 
  81.     $the_first = ''
  82.     if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){ 
  83.       $the_first = '<a class="first" href="' . $this->url(1) . '" rel="external nofollow" >' . $this->config['first'] . '</a>'
  84.     } 
  85.     //最后一页 
  86.     $the_end = ''
  87.     if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){ 
  88.       $the_end = '<a class="end" href="' . $this->url($this->totalPages) . '" rel="external nofollow" >' . $this->config['last'] . '</a>'
  89.     } 
  90.     //数字连接 
  91.     $link_page = ""
  92.     for($i = 1; $i <= $this->rollPage; $i++){ 
  93.       if(($this->nowPage - $now_cool_page) <= 0 ){ 
  94.         $page = $i; 
  95.       }elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){ 
  96.         $page = $this->totalPages - $this->rollPage + $i; 
  97.       }else
  98.         $page = $this->nowPage - $now_cool_page_ceil + $i; 
  99.       } 
  100.       if($page > 0 && $page != $this->nowPage){ 
  101.         if($page <= $this->totalPages){ 
  102.           $link_page .= '<a class="num" href="' . $this->url($page) . '" rel="external nofollow" >' . $page . '</a>'
  103.         }else
  104.           break
  105.         } 
  106.       }else
  107.         if($page > 0 && $this->totalPages != 1){ 
  108.           $link_page .= '<span class="current">' . $page . '</span>'
  109.         } 
  110.       } 
  111.     } 
  112.     //替换分页内容 
  113.     $page_str = str_replace( 
  114.       array('%HEADER%''%NOW_PAGE%''%UP_PAGE%''%DOWN_PAGE%''%FIRST%''%LINK_PAGE%''%END%''%TOTAL_ROW%''%TOTAL_PAGE%'), 
  115.       array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages), 
  116.       $this->config['theme']); 
  117.     return "<div>{$page_str}</div>"
  118.   } 

2. 控制器,随便写个demo。

  1. public function index(){ 
  2.     $obj=M("news"); 
  3.     $count = $obj->where('status=1 and classID=74 ')->count();// 查询满足要求的总记录数 
  4.     $limit = 10; 
  5.     $Page = new \Think\Page($count,$limit);// 实例化分页类 传入总记录数和每页显示的记录数(25) 
  6.     $show    = $Page->show();// 分页显示输出 
  7.     $list = $obj->where('status=1 and classID=74 ')->order('writetime desc')->limit($Page->firstRow.','.$Page->listRows)->select(); 
  8.     $firstlist = $obj->where('status=1 and classID=74 and Indexfirst=1')->order('writetime desc')->limit(4)->select(); 
  9.     $this->assign('firstlist',$firstlist); 
  10.     $this->assign('page',$show);// 赋值分页输出 
  11.     $this->assign('list',$list); 
  12.     $this->display(); 

3. 接下来是View层,样式控制。page.css文件

  1. .b-page { 
  2.  background: #fff; 
  3.  box-shadow: 0px 1px 2px 0px #E2E2E2; 
  4. .page { 
  5.  width: 100%; 
  6.  background: #FFF; 
  7.  text-align: center; 
  8.  overflow: hidden; 
  9.  font-size:14px; 
  10.  margin-top:50px; 
  11. .page .first, 
  12. .page .prev, 
  13. .page .current, 
  14. .page .num, 
  15. .page .current, 
  16. .page .next, 
  17. .page .end { 
  18.  padding: 8px 16px; 
  19.  margin: 0px 5px; 
  20.  display: inline-block; 
  21.  color: #144970; 
  22.  border: 1px solid #F2F2F2; 
  23.  border-radius: 5px; 
  24. .page .first:hover, 
  25. .page .prev:hover, 
  26. .page .current:hover, 
  27. .page .num:hover, 
  28. .page .current:hover, 
  29. .page .next:hover, 
  30. .page .end:hover { 
  31.  text-decoration: none; 
  32.  background: #F8F5F5; 
  33. .page .current { 
  34.  background-color: #144970; 
  35.  color: #FFF; 
  36.  border-radius: 5px; 
  37. .page .current:hover { 
  38.  text-decoration: none; 
  39.  background: #144970; 
  40. .page .not-allowed { 
  41.  cursor: not-allowed; 

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
返回顶部