이 글의 내용은 thinkphp?에서 페이징 효과를 얻는 방법을 소개하는 것입니다. 페이징 클래스 작성 및 사용(코드 예제) 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
우리는 아래와 같은 페이징 효과를 얻고 싶습니다:
이 페이징 클래스는 thinkphp 프레임워크에 내장된 페이징 클래스를 기반으로 수정되었습니다.
원래 페이징 클래스의 일부 디자인은 실제 사용에서 그다지 편리하지 않습니다. ;
1. 콘텐츠 페이지가 하나만 있는 경우 페이지 매김이 표시되지 않습니다.
2. 현재 페이지가 첫 번째 페이지와 마지막 페이지인 경우에는 페이지 매김이 표시되지 않습니다.
3. 페이지 매김 수가 상대적으로 적을 경우 홈페이지와 마지막 페이지 버튼이 표시되지 않습니다. 4. 페이지 매기기 콘텐츠를 감싸는 상위 p에 클래스가 없습니다. 5. 6. 데이터가 없으면 페이지가 표시되지 않습니다. 한 페이지 이상인 경우 페이지가 표시됩니다. 7. 기본이지만 현재 페이지가 첫 번째 및 마지막 페이지인 경우 버튼을 클릭해도 효과가 없습니다. ;8. 기본적으로 페이지라는 클래스를 상위 페이지에 추가합니다. 페이지가 매겨진 콘텐츠를 래핑하는 p 발견된 콘텐츠의 총 개수를 표시합니다. 샘플 환경 :thinkphp3.2.3
페이지 클래스 디렉터리: /Thinkphp/Library/Org/Bjy/Page.class .php
Page 클래스 코드는 다음과 같습니다:<?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:> // +---------------------------------------------------------------------- /* * PHP分页类 * 修改者:白俊遥 * 日 期:2015.5.10 * 邮 箱:baijunyao@baijunyao.com * 博 客:http://baijunyao.com */ namespace Org\Bjy; 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>共 %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>url($up_row) . '">' . $this->config['prev'] . '</a>' : '<a>' . $this->config['prev'] . '</a>'; //下一页 $down_row = $this->nowPage + 1; $down_page = ($down_row totalPages) ? '<a>url($down_row) . '">' . $this->config['next'] . '</a>' : '<a>' . $this->config['next'] . '</a>'; //第一页 $the_first = '<a>url(1) . '">' . $this->config['first'] . '</a>'; //最后一页 $the_end = '<a>url($this->totalPages) . '">' . $this->config['last'] . '</a>'; //数字连接 $link_page = ""; for($i = 1; $i rollPage; $i++){ if(($this->nowPage - $now_cool_page) 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 totalPages){ $link_page .= '<a>url($page) . '">' . $page . '</a>'; }else{ break; } }else{ $link_page .= '<span>' . $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>'.$page_str.'</div>'; } }</http:>Page 클래스 호출:
$count=$this->where($where)->count(); $page=new \Org\Bjy\Page($count,$limit); $list=$this->where($where)->order('addtime desc')->limit($page->firstRow.','.$page->listRows)->select(); $show=$page->show();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; }페이징 클래스의 사용법은 특정 참조용으로 원래 thinkphp와 동일합니다: thinkphp manual-data paging; (http://document.thinkphp.cn/manual_3_2.html#data_page)
위 내용은 thinkphp는 어떻게 페이징 효과를 얻나요? 페이징 클래스 작성 및 사용(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!