thinkphp5两种分页方法
use \org\until\Page;
public function page(){
//法一:thinkphp5自带分页
$list = Db::name('article')->paginate(5,true);
$page = $list->render();
//法二:使用扩展类库分页
$count = Db::name('article')->count();
$p = new Page($count, 5);
$p->setConfig('prev', '上一页');
$p->setConfig('header', '篇文章');
$p->setConfig('first', '首 页');
$p->setConfig('last', '末 页');
$p->setConfig('next', '下一页');
$temp_str = "%first%%upPage%%prePage%%linkPage%%nextPage%%downPage%%end%<select name='select' onChange='javascript:window.location.href=(this.options[this.selectedIndex].value);'>%allPage%</select>共<font color='#CD4F07'><b>%totalRow%</b></font>篇 5篇/每页";
$p->setConfig('theme', $temp_str);
//数据查询
$list = Db::name('article')->order('istop desc,addtime desc')->limit($p->firstRow . ',' . $p->listRows)->select();
echo Db::name('article')->getLastSql();
$page = $p->show();
//封装变量
$this->assign('page', $page);
$this->assign('list', $list);
// 渲染模板输出
return $this->fetch();
}
扩展page类
<?php
namespace org\until;
class Page {
// 起始行数
public $firstRow ;
// 列表每页显示行数
public $listRows ;
// 页数跳转时要带的参数
public $parameter ;
// 分页总页面数
protected $totalPages ;
// 总行数
protected $totalRows ;
// 当前页数
public $nowPage ;
// 分页的栏的总页数
protected $coolPages ;
// 分页栏每页显示的页数
protected $rollPage ;
//默认分页变量
protected $varPage;
// 分页显示定制
protected $config = array('header'=>'条记录','prev'=>'上一页','next'=>'下一页','first'=>'第一页','last'=>'最后一页','theme'=>' %totalRow% %header% %nowPage%/%totalPage% 页 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%');
/**
+----------------------------------------------------------
* 架构函数
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param array $totalRows 总的记录数
* @param array $listRows 每页显示记录数
* @param array $parameter 分页跳转的参数
+----------------------------------------------------------
*/
public function __construct($totalRows,$listRows=15,$parameter='',$var_page= 'page') {
$this->varPage = $var_page;
$this->totalRows = $totalRows;
$this->parameter = $parameter;
$this->rollPage = 5;
$this->listRows = $listRows;
$this->totalPages = ceil($this->totalRows/$this->listRows); //总页数
$this->coolPages = ceil($this->totalPages/$this->rollPage);
$this->nowPage = !empty($_GET[$this->varPage])?$_GET[$this->varPage]:1;
if(!empty($this->totalPages) && $this->nowPage>$this->totalPages) {
$this->nowPage = $this->totalPages;
}
$this->firstRow = $this->listRows*($this->nowPage-1);
}
public function setConfig($name,$value) {
if(isset($this->config[$name])) {
$this->config[$name] = $value;
}
}
/**
+----------------------------------------------------------
* 分页显示输出
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
*/
public function show() {
if(0 == $this->totalRows) return '';
$depr = strpos($_SERVER['REQUEST_URI'],'?')?'&':"?";
$p = $this->varPage;
$ext_htm = '.html';
$nowCoolPage = ceil($this->nowPage/$this->rollPage);
//静态化需要
$url = $_SERVER['REQUEST_URI'];
$url = str_ireplace($ext_htm,'',$url);
$patern = "/[\?|\&]+(".$p."=)[0-9]+/i";
echo $patern;
$url = preg_replace($patern,"",$url);
if($this->parameter != ''){
$url = $url.(strpos($_SERVER['REQUEST_URI'],'?')?'':"&").$this->parameter;
}
$depr = strpos($url,'?')?'&':"?";
/*$parse = parse_url($url);
if(isset($parse['query'])) {
parse_str($parse['query'],$params);
unset($params[$p]);
$url = $parse['path'].'?'.http_build_query($params);
}*/
//上下翻页字符串
$upRow = $this->nowPage-1;
$downRow = $this->nowPage+1;
if ($upRow>0){
$upPage="<a rel='external' href='".$url.$depr.$p."=$upRow{$ext_htm}'>".$this->config['prev']."</a>\n";
}else{
$upPage="<span>".$this->config['prev']."</span>\n";
}
if ($downRow <= $this->totalPages){
$downPage="<a rel='external' href='".$url.$depr.$p."=$downRow{$ext_htm}'>".$this->config['next']."</a>\n";
}else{
$downPage="<span>".$this->config['next']."</span>\n";
}
// << < > >>
if($nowCoolPage == 1){
$theFirst = "";
$prePage = "";
}else{
$preRow = $this->nowPage-$this->rollPage;
$prePage = "<a href='".$url.$depr.$p."=$preRow' >上".$this->rollPage."页</a>";
$theFirst = "<a href='".$url.$depr.$p."=1' >".$this->config['first']."</a>";
}
if($nowCoolPage == $this->coolPages){
$nextPage = "";
$theEnd="";
}else{
$nextRow = $this->nowPage+$this->rollPage;
$theEndRow = $this->totalPages;
$nextPage = "<a href='".$url.$depr.$p."=$nextRow' >下".$this->rollPage."页</a>";
$theEnd = "<a href='".$url.$depr.$p."=$theEndRow' >".$this->config['last']."</a>";
}
// 1 2 3 4 5
$linkPage = "";
for($i=1;$i<=$this->rollPage;$i++){
$page=($nowCoolPage-1)*$this->rollPage+$i;
if($page!=$this->nowPage){
if($page<=$this->totalPages){
$linkPage .= "<a rel='external' href='".$url.$depr.$p."=$page{$ext_htm}'>".$page."</a>\n";
}else{
break;
}
}else{
if($this->totalPages != 1){
$linkPage .="<span>".$page."</span>\n";
}
}
}
//下拉选择分页效果
$allPage = "";
for($i=1;$i<=$this->rollPage;$i++){
$page=($nowCoolPage-1)*$this->rollPage+$i;
if($page!=$this->nowPage){
if($page<=$this->totalPages){
$allPage .="<option value='".$url.$depr.$p."=$page{$ext_htm}'>".$page."</option>";
}else{
break;
}
}else{
$allPage .="<option value='".$url.$depr.$p."=$page{$ext_htm}' selected='selected'>".$page."</option>";
}
}
$pageStr = str_replace(
array('%header%','%nowPage%','%totalRow%','%totalPage%','%upPage%','%downPage%','%first%','%prePage%','%linkPage%','%allPage%','%nextPage%','%end%'),
array($this->config['header'],$this->nowPage,$this->totalRows,$this->totalPages,$upPage,$downPage,$theFirst,$prePage,$linkPage,$allPage,$nextPage,$theEnd),$this->config['theme']);
return $pageStr;
}
}
?>