TP6分页类重写

200 阅读1分钟

前言

TP6自带的分页类适合在多页面的刷新模式下使用,如果使用单页面模式,需要重新编写分页类。 预览图:

2025-02-06 17-11-39屏幕截图.png

步骤

1.创建类:在app目录下新建common_class文件夹,新建Page.php文件

2.Page.php文件代码:

<?php
namespace app\common_class;
use think\facade\Db;

class Page
{
    public $offset = 5;//每页条数
    public $total;//信息总数
    public $totalPage;//页数
    public $nowPage;//当前页码
    public $start;//limit起始

    
    /*构造函数,声明当前页,设置limit起始页*/
    public function __construct($nowPage) {
        
        $this->nowPage = $nowPage;
        $this->start = $this->offset * ($this->nowPage - 1);
    }
    
   
    /*分页数据集查询-需先创建article和class表*/
    public function pageQuery()
    { 
        $info = Db::name('article')->where('flag',1)
        ->alias('a')
        ->join('class c','a.class = c.id')
        ->field('a.id,a.title,a.date,c.name,c.father_id,c.father_name')
        ->limit($this->start,$this->offset)
        ->order('a.id','desc')
        ->select();
        return $info;
    }
    /*分页视图显示*/
    public function pageCount(){
        $info = Db::name('article')->where('flag',1)->select();
        //信息总数
        $count = count($info);
        $this->total = $count;
        //总页数计算
        $a = ceil($count/$this->offset);
        $b = (int)$a;
        $this->totalPage = $b;

        $page_a = "";
        $page_up = "<a id='page_list_up'>上一页</a>";
        $page_down = "<a id='page_list_down'>下一页</a>";

        if($this->totalPage < 11){
            /*页数10以内,全部输出*/
            for($i=1;$i<=$this->totalPage;$i++){
                if($i == $this->nowPage){
                    $page_a = $page_a."<a class='page_list_active'>".$i."</a>";
                }else{
                    $page_a = $page_a."<a class='page_list_normal'>".$i."</a>";
                }    
            } 
        }else{
            /*页数超过10,只输出10个*/
            //当前页面>5
            if($this->nowPage > 5){
                //末尾页面的显示
                if(($this->totalPage - $this->nowPage) <= 5){
                    for($i=$this->totalPage-9;$i<=$this->totalPage;$i++){
                        if($i == $this->nowPage){
                            $page_a = $page_a."<a class='page_list_active'>".$i."</a>";
                        }else{
                            $page_a = $page_a."<a class='page_list_normal'>".$i."</a>";
                        }    
                    }
                }else{
                    //非末尾页面
                    for($i=$this->nowPage-4;$i<=$this->nowPage+5;$i++){
                        if($i == $this->nowPage){
                            $page_a = $page_a."<a class='page_list_active'>".$i."</a>";
                        }else{
                            $page_a = $page_a."<a class='page_list_normal'>".$i."</a>";
                        }    
                    }
                }
                
            }else{
                //当前页面<5
                for($i=1;$i<=10;$i++){
                    if($i == $this->nowPage){
                        $page_a = $page_a."<a class='page_list_active'>".$i."</a>";
                    }else{
                        $page_a = $page_a."<a class='page_list_normal'>".$i."</a>";
                    }    
                }
            }
            
        }
        /* 添加上一页和下一页*/
        if($this->nowPage == 1){
            $page_a = $page_a.$page_down;
        }elseif($this->nowPage == $this->totalPage){
            $page_a = $page_up.$page_a;
        }else{
            $page_a = $page_up.$page_a.$page_down;
        }
        
        /* 返回最终html代码 */
        return $page_a;
    }


}

3.文章管理页面代码



<div class="content">
    <div class="content_title">管理文章</div>
    <div class="content_form">
        <div class="article_title">
            <div class="article_title_a">ID</div>
            <div class="article_title_b">标题</div>
            <div class="article_title_c">栏目</div>
            <div class="article_title_d">修改时间</div>
            <div class="article_title_e">操作</div>
        </div>
        {volist name="info" id="vo"}
        <div class="article_row">
            <div class="article_row_a">{$vo.id}</div>
            <div class="article_row_b">{$vo.title}</div>
            <div class="article_row_c">
                {if $vo.father_name == 0}
                {$vo.name}
                {else/}
                {$vo.father_name} > {$vo.name}
                {/if}
            </div>
            <div class="article_row_d">{$vo.date}</div>
            <div class="article_row_e">修改 | 删除</div>
        </div>
        {/volist}
    </div>
    <div id="fenye">
        <input id="now_page" type="hidden" value="{$now_page}"/>
        <span id="show_page_message">共{$totalpages}页,{$total}条信息。</span>
        {$pagelist|raw}

    </div>
</div>

<script>
    $(".page_list_normal").click(function () {
            let a = $(this).text();
            $("#right_content").load('article_admin/page/' + a);
    })
    $("#page_list_up").click(function () {
            let b = $("#now_page").val();
            let b2 = Number(b)-1;
            $("#right_content").load('article_admin/page/' + b2);
    })
    $("#page_list_down").click(function () {
            let c = $("#now_page").val()
            let c2 = Number(c)+1;
            $("#right_content").load('article_admin/page/' + c2);
    })
</script>

4.TP6控制器代码

<?php
use app\common_class\Page;//使用前先引入类

/*1.5 管理文章 */
    public function article_admin()
    {
        
        session_safe();
        $page = Request::param('page');
        $page2 = (int)$page;

        // 实例化分页类
        $page = new Page($page2);

        //初始化获得信息总数和页码
        $pagelist = $page -> pageCount();
        $total = $page -> total;
        $totalpages = $page -> totalPage;
        
        //获得当前页码数据集
        $result = $page->pageQuery();

        View::assign("now_page",$page2);
        View::assign("total",$total);
        View::assign("totalpages",$totalpages);
        View::assign("info",$result);
        View::assign("pagelist",$pagelist);
        return View::fetch();
    }