随着现代互联网技术的不断发展,网站的访问量越来越大,为了方便用户访问数据,分页功能成为了现代网站必不可少的功能之一。在thinkphp3.2框架中,分页功能也十分灵活,可以自定义分页样式和页码跳转功能。本文将介绍thinkphp3.2中分页页码跳转功能的实现方法和注意事项。
一、ThinkPHP3.2的分页功能
在ThinkPHP3.2框架中,可以通过以下方法实现简单的分页功能:
// 查询数据
$list = M('User')->where($where)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
// 实例化分页类
$Page = new \Think\Page($count,$pageSize);
// 输出分页html
$this->assign('page',$Page->show());其中,$list为查询到的数据,$where为查询条件,$count为查询数据总数,$pageSize为每一页显示的数据量。实例化\Think\Page类后,即可通过$Page->show()方法输出分页html。
二、自定义分页样式
立即学习“PHP免费学习笔记(深入)”;
在ThinkPHP3.2框架中,可以通过以下方法自定义分页样式:
在当前项目中创建一个名为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>';
}
}
}在控制器中引入自定义分页样式,并以以下方式使用:
// 引入分页类
import("Think.Page");
// 查询数据总数
$count = M('User')->where($where)->count();
// 实例化分页类
$Page = new \Think\Page($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框架中,分页页码跳转功能通过在分页样式中添加输入框和按钮实现。添加页码跳转功能的步骤如下:
在自定义分页样式中添加一个输入框和一个按钮:
$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>');在视图文件中,可以直接使用自定义的分页样式,并实现页码跳转功能:
<div class="pagination">
<?php echo $page;?>
</div>其中,在自定义分页样式中,使用 "__PAGE__" 和 "__HREF__" 分别表示当前页码和跳转链接。在输入框中输入跳转页码,点击按钮即可进行页码跳转。
总结
在ThinkPHP3.2框架中,分页页码跳转功能可以通过在分页样式中添加输入框和按钮实现。使用自定义分页样式可以使分页样式更加美观,同时也可以实现更多特定的分页需求。
以上就是ThinkPHP3.2中分页页码跳转功能的实现和注意事项的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号