自写thinkphp page分页功能。

用 thinkphp 也好久了。 不过一直没用他的page分页类,因为。。真心不好用。

好久之前就自己鼓捣了一个 分页函数,以代替page的功能。

下面分享一下吧。

主要是两个函数。 一个是正常的page分页功能,还有一个是获取 数字分页功能

如: 1 2 3 4 5 6 这样的分页。

function getShowPages($count,$page,$pagesize)
{
    if($page == 0) {$page = 1;}
    if(empty($count)){$count=0;}
    $firstRow = ($page - 1) * $pagesize;
    $countpage = intval($count / $pagesize);
    if (($count / $pagesize) > $countpage) {
        $countpage = $countpage + 1;
    }
    if ($page > 1) {
        $uppage = $page - 1;
    } else {
        $uppage = 1;
    }
    if ($page < $countpage) {
        $nextpage = $page + 1;
    } else {
        $nextpage = $countpage;
    }
    $showpage['firstRow'] = $firstRow;  //首页
    $showpage['count'] = $count;        //总记录数
    $showpage['countpage'] = $countpage; // 总页面数
    $showpage['pagesize'] = $pagesize;   //页面大小
    $showpage['page'] = $page;           //当前页
    $showpage['uppage'] = $uppage;       //上一页
    $showpage['nextpage'] = $nextpage;   //下一页
    return $showpage;
}
//tpl是分页模板   notpl 是当前页不需要链接  page 是当前页  countpage 是总页数
function getPages($tpl,$notpl,$page,$countpage){
    $pages="";
    if($countpage==1)
    {
        $pages=str_replace("[page]",$page,$notpl);
    }
    else
    {
        if($page>5)
        {
            $p_s=$page-5;
        }
        else
        {
            $p_s=1;
        }
        if(($page+5)>=$countpage)
        {
            $p_e=$countpage;
        }
        else
        {
            $p_e=$page+5;
        }

        if($page<5 and $countpage>10)
        {
            $p_e=$p_e+(10-$p_e);
        }

        for(;$p_s<=$p_e;$p_s++)
        {
            if($p_s==$page)
            {
                $pages_tmp=str_replace("[page]",$p_s,$notpl);
            }
            else
            {
                $pages_tmp=str_replace("[page]",$p_s,$tpl);
            }
            $pages.=$pages_tmp;
        }
        //if(floor($page%10)==0)
    }
    return $pages;
}

调用方法:

 

$count = $M->where($where)->count();   //获取总记录数 自己搞 where 
$ShowPage = getShowPages($count, $page, 16); /$count 是上面的记录数 $page是当前页  16 是页面大小
$list = $M->where($where)->order(‘id desc’)->limit($ShowPage[‘firstRow’] . ‘,’ . $ShowPage[‘pagesize’])->select(); // 调取相应页面的数据
$this->assign(‘list’, $list);
$this->assign(‘ShowPage’, $ShowPage); //模板赋值

PHP方面基本结束。

 

模板部分:

 

 <if condition="$ShowPage.count gt $ShowPage.pagesize ">  //判断是否有多页。只有一页的话不显示分页。
  <ul class="pagination">
  <if condition="$ShowPage.page gt 1 ">  //判断是否第一页 第一页不显示 上一页
  <li class="pageup"><span>&lt;</span><a href="/{$urltail}p/{$ShowPage[‘uppage’]}/">上一页</a></li></if>
  <php>echo getPages(‘<li><a href="/’.$urltail.’p/[page]/">[page]</a></li>’,'<li><a href="/’.$urltail.’p/[page]/" class="pageCurrent">[page]</a></li>’,$ShowPage[‘page’],$ShowPage[‘countpage’]);</php> //这个根据自己需要调用,显示入 1  2  3  4   5  6 这种序号分页
  <if condition="$ShowPage.page lt $ShowPage.countpage "> //判断是否是最后一页 最后一页不显示 下一页
  <li><span class="dotStyle">…</span></li><li class="pagedown"><a href="/{$urltail}p/{$ShowPage[‘nextpage’]}/">下一页</a><span>&gt;</span></li>
  </if>
  </ul>
</if>

上面需要说明的是:$urltail 这个变量因为我项目单页里集成了所有查询,用来固定URL的。getPages 函数的传参应该不难理解。

代码是自用,比较乱,轻喷。

发表评论

您的电子邮箱地址不会被公开。