以下方法是基于THINKPHP5框架开发,实现含有省略号的分页功能,如下图
此种分页和上一篇PHP实现分页功能(二)百度分页样式,固定分页个数有些类似;这种分页样式也是需要固定分页的个数,如上图,每次固定显示6个数量的分页(含省略号),点击当前页后,当前页 往后延固定个数及为尾数,如若不够固定分页的个数就往前延对应的个数即可。
控制器代码
/*
*分页功能
* 参数:p 当前页码数
* listpage 每页显示的数据条数
* totalpage 总页数
* fenye 分页个数
* num 当前分页延后个数
* */
public function index(){
$p=input('p',1,'intval');//当前页码数,默认显示第一页
$listpage=input('listpage',8,'intval');//每页显示的数据条数
$count=Db::name('shujubiao')->count();//数据总数
$totalpage=ceil($count/$listpage);//总页数
$fenye=input('listpage',6,'intval');//分页个数
$guding=input('listpage',5,'intval');//固定个数,带表分离开的1..x,省略号,当前页;最小为3,代表省略号在第二位
$num=input('listpage',1,'intval');//当前分页延后个数
$num=$fenye-$guding>=$num?$num:$fenye-$guding;//3带表分离开的1,省略号,当前页
//尾页
$end=$p+$num>$totalpage?$totalpage:$p+$num;//当前页后面显示个页数
$product=Db::name('shujubiao')->page($p,$listpage)->select();
$this->assign('product',$product);
$this->assign('p',$p);
$this->assign('totalpage',$totalpage);
$this->assign('fenye',$fenye);
$this->assign('end',$end);
$this->assign('guding',$guding);
return $this->view->fetch('页面');
}
html代码
<div class="page_box">
<div class="p_b_c">
<input type="hidden" id="page" value="{$p}">
<input type="hidden" id="class_id" value="{$class_id}">
<input type="hidden" id="totalpage" value="{$totalpage}">
<div id="prev-page" class="pn_btn prev-page"></div>
<ul>
{for start="1" end="$guding-1"}
<li onclick="page({$i},{$class_id})">{$i}</li>
{/for}
<li class="{$p<$fenye?'active1':''}">...</li>
{if condition="$p<$fenye"}
{for start="$guding-1" end="$fenye+1"}
<li onclick="page({$i},{$class_id})">{$i}</li>
{/for}
{else /}
{for start="$end-($fenye-$guding)" end="$end+1"}
<li onclick="page({$i},{$class_id})">{$i}</li>
{/for}
{/if}
</ul>
<div id="next-page" class="pn_btn next-page"></div>
</div>
</div>
js代码
//分页
//当前页跳转
function page(page) {
location.href = "/模块名/控制器名/方法名/p/" + page + '.html';
}
/*
* 上一页功能
* */
$(document).on('click', '#prev-page', function() {
var page = $("#page").val(); //获取当前分页
page--;
if (page < 1) {
page = 1;
alert('已经是第一页了');
return false;
}
location.href = "/模块名/控制器名/方法名/p/" + page + '.html';
});
/*
* 下一页功能
* */
$(document).on('click', '#next-page', function() {
var page = $("#page").val(); //获取当前分页
var totalpage = $("#totalpage").val();
page++;
if (page > totalpage) {
page = totalpage;
alert('已经是最后一页了');
return false;
}
location.href = "/模块名/控制器名/方法名/p/" + page + '.html';
});
如果想要加入分类功能,请参照第一篇分类功能文章,PHP实现分页功能(一)上一页/下一页
我们只需要调节$fenye分页条数、 $num当前分页延后个数, $guding省略号所在位置,三个参数,即可实现每页显示分页的个数、及尾数以及省略号位置,很方便。