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

广告:宝塔Linux面板高效运维的服务器管理软件 点击【 https://www.bt.cn/p/uNLv1L 】立即购买

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 \Think\Page($count,$pageSize);// 输出分页html$this->assign('page',$Page->show());
登录后复制

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

二、自定义分页样式

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

定义分页样式

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

<?phpnamespace 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中分页页码跳转功能的实现和注意事项的详细内容,更多请关注9543建站博客其它相关文章!

广告:SSL证书一年128.66元起,点击购买~~~

9543建站博客
一个专注于网站开发、微信开发的技术类纯净博客。
作者头像
admin创始人

肥猫,知名SEO博客站长,14年SEO经验。

上一篇:php swoole是什么
下一篇:使用Yii框架创建母婴网站

发表评论

关闭广告
关闭广告