【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#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方 ...
随机推荐
- web前端之HTML的前世今生
一个尖括号 < 一个尖括号能干什么 < ? 你可以编出一顶帽子 <(:-p 或一张笑脸 :-> 或诉说一份爱 <3 或者更直接一些 <!DOC ...
- WebForm 控件
一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text=&quo ...
- 【Android 疑难杂症1】android.content.ActivityNotFoundException: Unable to find explicit activity class
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.cnote ...
- CodeUI Test:创建第一个CodeUI Test
CodeUI Test是微软自动化测试的一个比较好的项目,它的原理是获取到Windows窗口上的控件,然后针对控件的部分属性进行获取和对比,模拟对控件进行点击.双击.右键点击等事件.这样可以录制用户测 ...
- TFS二次开发系列:六、TFS的版本控制
在TFS中对于版本控制是在WorkSpace工作区来控制的. 首先我们先整理WorkSpace的一些基本使用方法. CheckIn:迁入挂起的操作 CreateMapping:创建一个本地映射地址 D ...
- 事件委托和JQ事件绑定总结
事件委托: 比喻:事件委托的事例在现实当中比比皆是.比如,有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方 ...
- java面向对象的语言
对象:真实存在唯一的事物. 类: 实际就是对某种类型事物的共性属性与行为的抽取. 抽象的概念.... 车 我们从小的时候就不断的接触很多的对象,我们的大脑就会把 这些具备相同属性与行为的事物进行分类. ...
- Android 之surfaceView (画动态圆圈)
通过之前介绍的如何自定义View, 我们知道使用它可以做一些简单的动画效果.它通过不断循环的执行View.onDraw方法,每次执行都对内部显示的图形做一些调整,我们假设 onDraw方法每秒执行 ...
- python数据类型
整数 十六进制需要用前缀0x+0-9+a-f表示,如0xff00 浮点数(小数) 可以用1.23,1.56e9(科学计数法)表示 字符串 ""或''括起来都行 布尔值 只有True ...
- struts 标签的使用<转>
Struts2常用标签总结 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的 ...