您好,欢迎访问一九零五行业门户网

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中分页页码跳转功能的实现和注意事项的详细内容。
其它类似信息

推荐信息