ThinkPHP3.2中分页页码跳转功能的实现和注意事项

随着现代互联网技术的不断发展,网站的访问量越来越大,为了方便用户访问数据,分页功能成为了现代网站必不可少的功能之一。在thinkphp3.2框架中,分页功能也十分灵活,可以自定义分页样式和页码跳转功能。本文将介绍thinkphp3.2中分页页码跳转功能的实现方法和注意事项。

一、ThinkPHP3.2的分页功能

在ThinkPHP3.2框架中,可以通过以下方法实现简单的分页功能:

// 查询数据 $list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();  // 实例化分页类 $Page = new ThinkPage($count,$pageSize);  // 输出分页html $this->assign('page',$Page->show());

其中,$list为查询到的数据,$where为查询条件,$count为查询数据总数,$pageSize为每一页显示的数据量。实例化ThinkPage类后,即可通过$Page->show()方法输出分页html。

二、自定义分页样式

立即学习PHP免费学习笔记(深入)”;

在ThinkPHP3.2框架中,可以通过以下方法自定义分页样式:

  1. 定义分页样式

在当前项目中创建一个名为Page.class.php的文件,将以下代码复制到该文件中:

<?php namespace Think; class Page {     // 定义分页样式     private $rollPage   = 5; // 分页栏每页显示的页数     private $lastSuffix = true; // 是否显示最后一页的页码后缀     private $config     = array(         'header' => '<span class="rows">共 %TOTAL_ROW% 条记录</span>',         'prev'   => '<<',         'next'   => '>>',         'first'  => '1...',         'last'   => '...%TOTAL_PAGE%',         'theme'  => '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',     );     private $totalRows  = 0; // 总行数     private $listRows   = 20; // 每页显示行数     private $totalPages = 0; // 总页数     private $nowPage    = 1; // 当前页数     private $firstRow   = 1; // 起始行数     private $varPage    = 'page'; // 分页变量名     private $p          = 'p'; // 分页参数名     private $url        = ''; // 当前链接URL     private $baseUrl    = ''; // 分页基础URL     private $params     = array(); // 分页跳转时要带的参数     private $anchor     = ''; // 锚点参数     // 构造方法     public function __construct($totalRows,$listRows='',$p='page'){         $this->totalRows = $totalRows;         $this->varPage = $p;         if (!empty($listRows)) {             $this->listRows = $listRows;         }         $this->totalPages = ceil($this->totalRows/$this->listRows); //总页数         $this->nowPage    = !empty($_GET[$this->varPage])?intval($_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 show($url='') {         if (0 == $this->totalRows) {             return '';         }          // 记录当前URL         $this->url = empty($url) ? U(ACTION_NAME).'/' : $url;         // 获取当前页码         $this->nowPage    = !empty($_GET[$this->varPage])?intval($_GET[$this->varPage]):1;         // 计算分页信息         $this->totalPages = ceil($this->totalRows/$this->listRows);          // 分页处理         if($this->totalPages > $this->rollPage){             $linkPage = "<ul class='pagination'>";             $inum = floor($this->rollPage/2);             if($this->nowPage <= $inum){                 $this->lastSuffix=false;             }             if($this->nowPage > 1){                 $this->addUrl($linkPage,$this->nowPage-1,'上一页','class="prev"');             }             for($i = 1; $i <= $this->rollPage; $i++){                 if(($this->nowPage+$inum) >= $this->totalPages && $this->totalPages > $this->rollPage){                     $page = $this->totalPages-$this->rollPage+$i;                 }else{                     $page = $this->nowPage-$inum+$i;                 }                 if($page > 0 && $page != $this->nowPage){                     if($page <= $this->totalPages){                         $this->addUrl($linkPage,$page,'第'.$page.'页','');                     }else{                         break;                     }                 }else{                     if($page > 0 && $this->rollPage < $this->totalPages){                         $this->addUrl($linkPage,$page,'第'.$page.'页','');                     }                 }             }             if($this->nowPage < $this->totalPages){                 $this->addUrl($linkPage,$this->nowPage+1,'下一页','class="next"');             }             if($this->lastSuffix){                 $this->addUrl($linkPage,$this->totalPages,'最后一页');             }             $linkPage.='</ul>';         }else{             $linkPage = "<ul class='pagination'>";             for($i=1;$i<=$this->totalPages;$i++){                 if($this->nowPage==$i) {                     $linkPage.='<li class="active"><span>'.$i.'</span></li>';                 } else {                     $this->addUrl($linkPage,$i,'第'.$i.'页','');                 }             }             $linkPage.='</ul>';         }         $pageStr  = str_replace(             array('%HEADER%','%NOW_PAGE%','%TOTAL_PAGE%','%TOTAL_ROW%','%FIRST%','%UP_PAGE%','%LINK_PAGE%','%DOWN_PAGE%','%END%'),             array($this->config['header'],$this->nowPage,$this->totalPages,$this->totalRows,$this->config['first'],$this->config['prev'],$linkPage,$this->config['next'],$this->config['last']),$this->config['theme']);         return $pageStr;     }     // 添加分页URL     protected function addUrl(&$linkPage,$page,$text,$class=''){         if($page > 0){             $url = $this->url;             $url .= strpos($url,'?') ? '&' : '?';             $url .= $this->p.'='.$page;             if(!empty($this->params)){                 foreach($this->params as $key=>$val){                     $url .= '&'.$key.'='.$val;                 }             }             if(!empty($this->anchor)){                 $url .= '#'.$this->anchor;             }             $linkPage.='<li '.$class.'><a href="'.htmlentities($url).'">'.$text.'</a></li>';         }     } }
  1. 使用自定义分页样式

在控制器中引入自定义分页样式,并以以下方式使用:

// 引入分页类 import("Think.Page"); // 查询数据总数 $count = M('User')->where($where)->count(); // 实例化分页类 $Page = new ThinkPage($count,$pageSize); // 自定义分页样式 $Page->setConfig('prev', '上一页'); $Page->setConfig('next', '下一页'); $Page->setConfig('first', '第一页'); $Page->setConfig('last', '最后一页'); $Page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%'); // 查询数据 $list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select(); // 输出分页html $this->assign('page',$Page->show());

三、分页页码跳转功能

在ThinkPHP3.2框架中,分页页码跳转功能通过在分页样式中添加输入框和按钮实现。添加页码跳转功能的步骤如下:

  1. 修改分页样式

在自定义分页样式中添加一个输入框和一个按钮:

$Page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% <div class="input-group input-group-sm" style="width: 150px;display:inline;"><input type="text" class="form-control" value="__PAGE__" onkeydown="javascript:if(event.keyCode==13){var page=(this.value|0);location.href='__HREF__'.replace('__PAGE__',page);return false;}"><span class="input-group-btn"><button class="btn btn-default" onclick="javascript:var page=(this.previousSibling.value|0);location.href='__HREF__'.replace('__PAGE__',page);return false;">GO!</button></span></div>');
  1. 使用分页页码跳转功能

在视图文件中,可以直接使用自定义的分页样式,并实现页码跳转功能:

<div class="pagination">     <?php echo $page;?> </div>

其中,在自定义分页样式中,使用 “__PAGE__” 和 “__HREF__” 分别表示当前页码和跳转链接。在输入框中输入跳转页码,点击按钮即可进行页码跳转。

总结

在ThinkPHP3.2框架中,分页页码跳转功能可以通过在分页样式中添加输入框和按钮实现。使用自定义分页样式可以使分页样式更加美观,同时也可以实现更多特定的分页需求。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享