【PHP】分页条函数封装
这两天在学习PHP
想做一个前端后台都包含的网站
看了一些视频发现大牛们都是将封装起来实现代码的重用性
本人技拙也写了个分页条函数的封装
分页条在用PHP网站开发中十分常用
通过封装代码来提高网站开发效率
function pageBar($table,$pageSize,$showPage=5){ //第一个参数为表名 第二个参数为每页显示几个 需要与之前遍历数据处相同
$page = $_GET['p'];
$sql1 = "select COUNT(*) from ".$table;
$res1 = mysql_fetch_array(mysql_query($sql1));
$total = $res1[0];
$totalPage = ceil($total / $pageSize); //获取总页数
$pageOffset = ($showPage - 1) / 2; //页码偏移量
$pageBanner = "";
$pageSelf = $_SERVER['PHP_SELF'];
$start = 1; //开始页码
$end = $totalPage; //结束页码
if($page > 1){
$pageBanner .= "<a href='".$pageSelf."?p=1'>首页</a>";
$pageBanner .= "<a href='".$pageSelf."?p=".($page - 1)."'>上一页</a>";
}
if($totalPage > $showPage){ //当总页数大于显示页数时
if($page > $pageOffset + 1){ //当当前页大于页码偏移量+1时,也就是当页码为4时 开始页码1替换为...
$pageBanner .= "...";
}
if($page > $pageOffset){ //当当前页大于页码偏移量时 开始页码变为当前页-偏移页码
$start = $page - $pageOffset;
$end = $totalPage > $page + $pageOffset ? $page + $pageOffset : $totalPage;
//如果当前页数+偏移量大于总页数 那么$end为总页数
}else{
$start = 1;
$end = $totalPage > $showPage ? $showPage : $totalPage;
}
if($page + $pageOffset > $totalPage){
$start = $start - ($page + $pageOffset - $end);
}
}
for($i = $start ; $i <= $end ; $i++){ //循环出页码
if($i == $page){
$pageBanner .= "<span>".$i."</span>";
}else{
$pageBanner .= "<a href='".$pageSelf."?p=".$i."'>".$i."</a>";
}
}
if($totalPage > $showPage && $totalPage > $page + $pageOffset){ //当总页数大于页码显示页数时 且总页数大于当前页+偏移量
$pageBanner .= "...";
}
if($page < $totalPage){
$pageBanner .= "<a href='".$pageSelf."?p=".($page + 1)."'>下一页</a>";
$pageBanner .= "<a href='".$pageSelf."?p=".$totalPage."'>尾页</a>";
}
echo $pageBanner;
}
上面是进行的代码封装 可以直接来调用
pageBar($table,$pageSize,$showPage=5);
三个参数解释如下
$table 表名
$pageSize 每页显示多少条 需要与之前遍历显示数据相同
$showPage 可选参数,可见页数,默认为5,注意里面需要填奇数!

当$showPage=5时 这里可见页数只有5页
完整代码如下图
<?php
$link = mysql_connect('localhost','root','123456');
mysql_select_db('test',$link);
mysql_query("set names UTF8");
$page = $_GET['p'];
$pageSize = 2;
$sql = "select * from page limit ".($page-1)*$pageSize.",$pageSize";
$res = mysql_query($sql);
echo "<table width=40% border=1 cellspacing=0>";
echo "<tr><td>用户名</td><td>密码</td></tr>";
while($row = mysql_fetch_array($res)){
echo "<tr><td>".$row['username']."</td><td>".$row['password']."</td></tr>";
}
echo "</table>"; function pageBar($table,$pageSize,$showPage=5){ //第一个参数为表名 第二个参数为每页显示几个 需要与之前遍历数据处相同
$page = $_GET['p'];
$sql1 = "select COUNT(*) from ".$table;
$res1 = mysql_fetch_array(mysql_query($sql1));
$total = $res1[0];
$totalPage = ceil($total / $pageSize); //获取总页数
$pageOffset = ($showPage - 1) / 2; //页码偏移量
$pageBanner = "";
$pageSelf = $_SERVER['PHP_SELF'];
$start = 1; //开始页码
$end = $totalPage; //结束页码
if($page > 1){
$pageBanner .= "<a href='".$pageSelf."?p=1'>首页</a>";
$pageBanner .= "<a href='".$pageSelf."?p=".($page - 1)."'>上一页</a>";
}
if($totalPage > $showPage){ //当总页数大于显示页数时
if($page > $pageOffset + 1){ //当当前页大于页码偏移量+1时,也就是当页码为4时 开始页码1替换为...
$pageBanner .= "...";
}
if($page > $pageOffset){ //当当前页大于页码偏移量时 开始页码变为当前页-偏移页码
$start = $page - $pageOffset;
$end = $totalPage > $page + $pageOffset ? $page + $pageOffset : $totalPage;
//如果当前页数+偏移量大于总页数 那么$end为总页数
}else{
$start = 1;
$end = $totalPage > $showPage ? $showPage : $totalPage;
}
if($page + $pageOffset > $totalPage){
$start = $start - ($page + $pageOffset - $end);
}
}
for($i = $start ; $i <= $end ; $i++){ //循环出页码
if($i == $page){
$pageBanner .= "<span>".$i."</span>";
}else{
$pageBanner .= "<a href='".$pageSelf."?p=".$i."'>".$i."</a>";
} }
if($totalPage > $showPage && $totalPage > $page + $pageOffset){ //当总页数大于页码显示页数时 且总页数大于当前页+偏移量
$pageBanner .= "...";
}
if($page < $totalPage){
$pageBanner .= "<a href='".$pageSelf."?p=".($page + 1)."'>下一页</a>";
$pageBanner .= "<a href='".$pageSelf."?p=".$totalPage."'>尾页</a>";
}
echo $pageBanner;
} ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>11</title>
<style type="text/css">
*{margin: 0;padding: 0;}
.div1{width: 400px;padding: 5px;border: 1px solid red;text-align: center;}
.div1 a{margin-left: 5px;color: #000;text-decoration: none;color: red;}
.div1 span{margin-left: 5px;text-decoration: underline;}
</style>
</head>
<body>
<div class="div1">
<?php pageBar("page",2); ?>
</div>
</body>
</html>
这里注意第7行的$pageSize需要与下面函数调用传入参数相同
里面只包含a元素和span标签
span代表当前页的页码
所以直接可以在html代码里面套个div再去直接修改里面的样式
【PHP】分页条函数封装的更多相关文章
- 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数
前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...
- Django分页类的封装
Django分页类的封装 Django ORM 封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...
- android中RecycleView分页原生代码封装,无任何第三方代
概述 RecycleView分页加载封装,简单方便,功能齐全 详细 代码下载:http://www.demodashi.com/demo/13283.html 一.场景: 在项目开发中经常使用到列表集 ...
- js cookie创建读取删除函数封装
js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...
- 测开之路一百三十三:实现sql函数封装
连接数据库的频率很高,所以把数据库操作封装起来 函数封装: def make_dicts(cursor, row): """ 将游标获取的Tuple根据数据库列表转换为d ...
- ExtJS自制表格Grid分页条
试过Grid自带的load和分页功能,没有成功,干脆就自己写了...... 主要是查询条件比较复杂...... 希望哪位大神能有更好的意见. Ext.define('MyApp.ux.Paginati ...
- mysql数据库管理工具sqlyog在首选项里可以设置默认查询分页条数和字体,改写关键字大小写
sqlyog设置一直习惯用sqlyog来管理mysql数据库,但有三个地方用得不是很爽:1.默认查询条数只有1000条经常需要勾选掉重新查询.2.自动替换关键字大小写,有时候字段名为关键字的搞成大写的 ...
- extjs表格下的分页条——Ext.grid.Panel 的 pagingtoolbar
两种分页条:每页固定条数的分页条 和 自定义选择每页内容条数的分页条 一.每页固定条数的分页条 这种样式的-- dockedItems: [{ xtype: 'pagingtoolbar', stor ...
- c#读写共享内存操作函数封装
原文 c#读写共享内存操作函数封装 c#共享内存操作相对c++共享内存操作来说原理是一样,但是c#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方 ...
随机推荐
- 微信小程序-媒体组件
audio 音频. MediaError.code 示例代码: <!-- audio.wxml --> <audio poster="{{poster}}" na ...
- The communication of Linux Server and Localtion
当用Secure CRT远程登录服务器时,若建立本地与服务器间文件自由传输的机制,我们就可以实现远程办公.具体方法如下: 1. 确定远程服务器的IP.可以通过Secure CRT进行远程登录. 2.在 ...
- idea打包java可执行jar包
1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...
- Java项目JUnit简单使用
前面自己写了一个计算器,准备用在项目里 http://www.cnblogs.com/blog5277/p/5707304.html 由于项目是用户计算跟钱有关的,所以这可不敢出BUG 于是就用了JU ...
- 1007. Maximum Subsequence Sum (25)
Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...
- Strus2学习Exception处理集锦(一)
2015-01-05 同学用dom4j写的一个更改节点文本的方法爆出这样一个错误: 代码: for(Iterator itr=root.elementIterator();itr.hasNext(); ...
- iOS - WXPay 微信支付
1.微信支付申请 微信支付官方集成指引 微信支付官方集成指导视频 微信 APP 支付开发者文档 微信公众平台 微信开放平台 微信商户平台 1.1 微信 APP 支付申请步骤 APP 支付:APP 支付 ...
- css3——新盒子定义box-sizing
css3对盒子有了新定义,以前的 盒子实际宽(高) = padding + width(height) + ( border * 2); 使用了box-sizing之后盒子实际宽(高) 就等于 wid ...
- MySQL自定义函数例子
-- 根据ID查询对应行的name CREATE FUNCTION function_first (id INT) --创建 BEGIN --开始 ); --声明变量,必须写在第一行,每一个变量最好单 ...
- [经验] 新版SkyIAR、Easy Image X在有些PE里不能运行的解决办法
[经验] 新版SkyIAR.Easy Image X在有些PE里不能运行的解决办法 xxwl2008 发表于 2013-1-26 11:58:38 https://www.itsk.com/threa ...