这两天在学习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】分页条函数封装的更多相关文章

  1. 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  2. Django分页类的封装

    Django分页类的封装 Django ORM  封装 之前有提到(Django分页的实现)会多次用到分页,将分页功能封装起来能极大提高效率. 其实不是很难,就是将之前实现的代码全都放到类中,将需要用 ...

  3. android中RecycleView分页原生代码封装,无任何第三方代

    概述 RecycleView分页加载封装,简单方便,功能齐全 详细 代码下载:http://www.demodashi.com/demo/13283.html 一.场景: 在项目开发中经常使用到列表集 ...

  4. js cookie创建读取删除函数封装

    js cookie创建读取删除函数封装 一.总结 都是为了方便操作,这样弄了很方便 1.创建cookie的函数封装的作用:方便设置过期时间expire,方便设置键和值 2.查询cookie的数据封装的 ...

  5. 测开之路一百三十三:实现sql函数封装

    连接数据库的频率很高,所以把数据库操作封装起来 函数封装: def make_dicts(cursor, row): """ 将游标获取的Tuple根据数据库列表转换为d ...

  6. ExtJS自制表格Grid分页条

    试过Grid自带的load和分页功能,没有成功,干脆就自己写了...... 主要是查询条件比较复杂...... 希望哪位大神能有更好的意见. Ext.define('MyApp.ux.Paginati ...

  7. mysql数据库管理工具sqlyog在首选项里可以设置默认查询分页条数和字体,改写关键字大小写

    sqlyog设置一直习惯用sqlyog来管理mysql数据库,但有三个地方用得不是很爽:1.默认查询条数只有1000条经常需要勾选掉重新查询.2.自动替换关键字大小写,有时候字段名为关键字的搞成大写的 ...

  8. extjs表格下的分页条——Ext.grid.Panel 的 pagingtoolbar

    两种分页条:每页固定条数的分页条 和 自定义选择每页内容条数的分页条 一.每页固定条数的分页条 这种样式的-- dockedItems: [{ xtype: 'pagingtoolbar', stor ...

  9. c#读写共享内存操作函数封装

    原文 c#读写共享内存操作函数封装 c#共享内存操作相对c++共享内存操作来说原理是一样,但是c#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方 ...

随机推荐

  1. 【干货】微信场景之H5页面制作免费工具大集合

    营销代有手段出,各领风骚数百天.要说现在哪些营销方式最能传播,屡屡刷爆朋友圈的H5页面肯定就是首当其冲的,提到H5页面,就立马想到"围住神经猫",上线微信朋友圈3天的时间便创造了用 ...

  2. MacOS X Terminal中设置代理

    MacOS X中,即使在网络设置中配置了代理连接,Terminal中也不能访问不可描述的东西,需要额外设置. 我用的是Shadowsocks,使用privoxy搭建了本地的代理服务器,地址是http: ...

  3. div居中方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. js 对多sheet Excel赋值操作

    function ExpExcel(){ var tempStr = ""; var filePath ="" var excelname=ReportFile ...

  5. SQL Tuning / SQL 性能 优化 调优

    Some key concents regarding SQL optimization predicate selectivity (column unique ratio) / cardinali ...

  6. python & c

    http://www.ibm.com/developerworks/cn/linux/l-cn-pythonandc/

  7. java 计算 1到10 的 阶层的和(采用递归的方法)

    package hibernate; public class t { public static void main(String[] args) { System.out.println(jiec ...

  8. Mysql执行大文件sql语句 -- 未测试

    如果.sql文件过大,mysql会直接断开连接 解决方法: 在mysql的配置文件my.cnf 中加入 一行max_allowed_packet = 100M(该大小>=mysql.sql文件大 ...

  9. css学习笔记 7

    background-position属性值为百分比的时候,第一个百分比表示水平方向的距离,第二个表示垂直方向上的距离. text-indent的主要作用是为段落设置首行缩进,只能应用于块级元素.该属 ...

  10. cf#382div2

    A. 题意:字符串长度n,每次可向左向右跳k个格子.要求不能在障碍物处停留('#'),可以在空地处停留(' . ').给出字符串,从G开始,问能不能到达T. 分析:直接从G处开始向两边搜,如果能到T则 ...