插件窝 干货文章 ThinkPHP3.2中分页页码跳转功能的实现和注意事项

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

gt amp Page 样式 493    来源:    2024-10-25

随着现代互联网技术的不断发展,网站的访问量越来越大,为了方便用户访问数据,分页功能成为了现代网站必不可少的功能之一。在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框架中,可以通过以下方法自定义分页样式:

  1. 定义分页样式

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

<?php namespace Think;
class Page {
    // 定义分页样式
    private $rollPage   = 5; // 分页栏每页显示的页数
    private $lastSuffix = true; // 是否显示最后一页的页码后缀
    private $config     = array(
        &#39;header&#39; => '<span>共 %TOTAL_ROW% 条记录</span>',
        'prev'   =&gt; ' '&gt;&gt;',
        'first'  =&gt; '1...',
        'last'   =&gt; '...%TOTAL_PAGE%',
        'theme'  =&gt; '%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-&gt;totalRows = $totalRows;
        $this-&gt;varPage = $p;
        if (!empty($listRows)) {
            $this-&gt;listRows = $listRows;
        }
        $this-&gt;totalPages = ceil($this-&gt;totalRows/$this-&gt;listRows); //总页数
        $this-&gt;nowPage    = !empty($_GET[$this-&gt;varPage])?intval($_GET[$this-&gt;varPage]):1;
        if(!empty($this-&gt;totalPages) &amp;&amp; $this-&gt;nowPage&gt;$this-&gt;totalPages) {
            $this-&gt;nowPage = $this-&gt;totalPages;
        }
        $this-&gt;firstRow   = $this-&gt;listRows*($this-&gt;nowPage-1);
    }
    // 显示分页
    public function show($url='') {
        if (0 == $this-&gt;totalRows) {
            return '';
        }

        // 记录当前URL
        $this-&gt;url = empty($url) ? U(ACTION_NAME).'/' : $url;
        // 获取当前页码
        $this-&gt;nowPage    = !empty($_GET[$this-&gt;varPage])?intval($_GET[$this-&gt;varPage]):1;
        // 计算分页信息
        $this-&gt;totalPages = ceil($this-&gt;totalRows/$this-&gt;listRows);

        // 分页处理
        if($this-&gt;totalPages &gt; $this-&gt;rollPage){
            $linkPage = "
    ";             $inum = floor($this->rollPage/2);             if($this->nowPage lastSuffix=false;             }             if($this->nowPage > 1){                 $this->addUrl($linkPage,$this->nowPage-1,'上一页','class="prev"');             }             for($i = 1; $i 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 totalPages){                         $this->addUrl($linkPage,$page,'第'.$page.'页','');                     }else{                         break;                     }                 }else{                     if($page > 0 && $this->rollPage totalPages){                         $this->addUrl($linkPage,$page,'第'.$page.'页','');                     }                 }             }             if($this->nowPage totalPages){                 $this->addUrl($linkPage,$this->nowPage+1,'下一页','class="next"');             }             if($this->lastSuffix){                 $this->addUrl($linkPage,$this->totalPages,'最后一页');             }             $linkPage.='

';         }else{             $linkPage = "

    ";             for($i=1;$itotalPages;$i++){                 if($this->nowPage==$i) {                     $linkPage.='
  • '.$i.'
  • ';                 } else {                     $this->addUrl($linkPage,$i,'第'.$i.'页','');                 }             }             $linkPage.='

';         }         $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.='

  • '.$text.'
  • ';         }     } }

    1. 使用自定义分页样式

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

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

    三、分页页码跳转功能

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

    1. 修改分页样式

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

    $Page-&gt;setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% <div>
    <input><span><button>GO!</button></span>
    </div>');
    1. 使用分页页码跳转功能

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

    <div>
        <?php  echo $page;?>
    </div>

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

    总结

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