`
txf2004
  • 浏览: 7065714 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PHP分页效果 页码自动适应范围

阅读更多

前后各显示一定页数

http://www.corange.cn//uploadfiles/01_83152.gif


于是写了一个,可以自动适应范围的页码分页程序
也就是说,页码格式如下
<< < 1 2 3 4 5 6 7 > >>
<< < 6 7 8 9 10 11 12 > >>

下划线为当前页,这样就可以固定显示一个相近的页码
<?php
function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){
$pagecode = '';//定义变量,存放分页生成的HTML
$page = intval($page);//避免非数字页码
$total = intval($total);//保证总记录数值类型正确
if(!$total) return array();//总记录数为零返回空数组
$pages = ceil($total/$pagesize);//计算总分页
//处理页码合法性
if($page<1) $page = 1;
if($page>$pages) $page = $pages;
//计算查询偏移量
$offset = $pagesize*($page-1);
//页码范围计算
$init = 1;//起始页码数
$max = $pages;//结束页码数
$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数
$pageoffset = ($pagelen-1)/2;//页码个数左右偏移量

//生成html
$pagecode='<div class="page">';
$pagecode.="<span>$page/$pages</span>";//第几页,共几页
//如果是第一页,则不显示第一页和上一页的连接
if($page!=1){
$pagecode.="<a href=\"{$phpfile}?page=1\">&lt;&lt;</a>";//第一页
$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."\">&lt;</a>";//上一页
}
//分页数大于页码个数时可以偏移
if($pages>$pagelen){
//如果当前页小于等于左偏移
if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.='<span>'.$i.'</span>';
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">&gt;</a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">&gt;&gt;</a>";//最后一页
}
$pagecode.='</div>';
return array('pagecode'=>$pagecode,'sqllimit'=>' limit '.$offset.','.$pagesize);
}
?>
函数参数:

$page 当前$_GET获得的页码
$total 总记录数
$phpfile 页码连接文件名
$pagesize 不用解释了吧 呵呵
$pagelen 最多显示几个页码 注意(奇数),对称嘛!
函数返回一个数组:
pagecode 索引对应的内容是 生成的HTML 代码
sqllimit 索引对应的是sql limit 后缀

使用方法:

<?php
$phpfile = 'index.php';
$page= isset($_GET['page'])?$_GET['page']:1;
$db = new Mysql();
$counts = $db->counts('select `id` from `test`');
$sql='select `id`,`title` from `test`';
$getpageinfo = page($page,$counts,$phpfile);
$sql.=$getpageinfo['sqllimit'];
$data = $db->getRows($sql);
?>
<?php
echo $getpageinfo['pagecode'];//显示分页的html代码
?>
css

<style type="text/css">
body{font-family:Tahoma;}
.page{padding:2px;font-weight:bolder;font-size:12px;}
.page a{border:1px solid #ccc;padding:0 5px 0 5px;margin:2px;text-decoration:none;color:#333;}
.page span{padding:0 5px 0 5px;margin:2px;background:#09f;color:#fff;border:1px solid #09c;}
</style>
完善:加了页码跳转文本框

<?php
function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){
$pagecode = '';//定义变量,存放分页生成的HTML
$page = intval($page);//避免非数字页码
$total = intval($total);//保证总记录数值类型正确
if(!$total) return array();//总记录数为零返回空数组
$pages = ceil($total/$pagesize);//计算总分页
//处理页码合法性
if($page<1) $page = 1;
if($page>$pages) $page = $pages;
//计算查询偏移量
$offset = $pagesize*($page-1);
//页码范围计算
$init = 1;//起始页码数
$max = $pages;//结束页码数
$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数
$pageoffset = ($pagelen-1)/2;//页码个数左右偏移量

//生成html
$pagecode='<div class="page">';
$pagecode.="<span>$page/$pages</span>";//第几页,共几页
//如果是第一页,则不显示第一页和上一页的连接
if($page!=1){
$pagecode.="<a href=\"{$phpfile}?page=1\">&lt;&lt;</a>";//第一页
$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."\">&lt;</a>";//上一页
}
//分页数大于页码个数时可以偏移
if($pages>$pagelen){
//如果当前页小于等于左偏移
if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.='<span>'.$i.'</span>';
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">&gt;</a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">&gt;&gt;</a>";//最后一页
}
$pagecode.="<input type=\"text\" size=\"3\" onkeydown=\"if(event.keyCode==13) {window.location.href='{$phpfile}?page='+this.value; return false;}\" /></div>";
return array('pagecode'=>$pagecode,'sqllimit'=>' limit '.$offset.','.$pagesize);
}
?>
以下是新手使用说明

<?php
$phpfile = 'index.php';//页面文件名
$page= isset($_GET['page'])?$_GET['page']:1;//默认页码
$db = mysql_connect('localhost','test','test');//链接数据库
mysql_select_db('test',$db);//选择数据库
$counts = mysql_num_rows(mysql_query('select `id` from `test`',$db));//获取需要的数据总条数
$sql='select `id`,`title` from `test`';//定义查询语句SQL
$getpageinfo = page($page,$counts,$phpfile);//调用函数,生成分页HTML 和 SQL LIMIT 子句
$sql.=$getpageinfo['sqllimit'];//组合完整的SQL语句
$data = $row = array();//初始化数组
$result = mysql_query($sql,$db);//获取结果集
//将数据装入$data数组
while($row = mysql_fetch_array($result)){
$data[]=$row;
}
?>
<?php
echo $getpageinfo['pagecode'];//显示分页的html代码
?>

分享到:
评论

相关推荐

    PHP自动适应范围的页码分页程序

    ### PHP自动适应范围的页码分页程序 在开发基于Web的应用时,为了提升用户体验以及减少服务器负担,分页功能是必不可少的一项技术。本文将详细解析一个PHP自适应范围页码分页程序的设计思路与实现细节,帮助读者...

    PHP通用分页程序

    本文将深入探讨PHP分页的实现原理和具体步骤,并通过一个名为“小贤PHP通用分页程序”的实例进行详解。 1. **分页原理** 分页的基本思想是将大量数据分成多个小块(页),每次只加载一部分数据到前端展示,用户...

    php实现的分页类.zip

    下面将详细探讨PHP分页类的核心原理、设计模式以及如何在实际项目中应用。 一、分页类的设计原理 1. 计算总页数:分页类首先需要获取数据库中的总记录数,然后根据每页显示的数据量(通常称为每页条数)来计算总...

    实用的PHP分页类库,实例化即可使用

    本篇文章将详细讲解一个实用的PHP分页类库的使用方法,以及它如何帮助开发者轻松实现高效、简洁的分页功能。 首先,这个分页类库的设计理念是简化代码,提高开发效率。通过实例化类并传入关键参数,开发者就能快速...

    php自动适应范围的分页代码

    《PHP自动适应范围的分页代码详解》 在网页开发中,分页是常见的功能,尤其是在数据量较大的情况下,为了提高用户体验,我们需要实现一个能够自动适应页面范围的分页功能。这里,我们将深入探讨如何使用PHP编写这样...

    一个万能的php分页类.zip

    4. **当前页判断**:通过URL参数或POST数据获取当前请求的页码,并确保其在合法范围内(1至总页数之间)。 5. **分页链接生成**:这是分页类的核心部分,它需要生成上一页、下一页、第一页、最后一页以及中间页的...

    关于分页处理--跳转到第N页

    分页算法主要是计算每页展示的数据数量(每页条目数)和当前页的数据范围。例如,如果总数据数为N,每页显示M条,那么总页数为`Math.ceil(N / M)`,其中`Math.ceil()`是向上取整函数。对于第n页,起始位置为`(n-1) ...

    php google或baidu分页代码

    上述代码提供了一个简单的PHP分页类(Pager.class.php),适用于集成到Google或百度等搜索引擎的查询结果页面中,或者任何需要分页功能的PHP项目。 该类主要包含以下核心知识点: 1. **类定义**:`Pager`类用于处理...

    数据分页程序完全解决方案(含普通分页/分段分页/原始分页/since_id分页)

    4) 传统的分页, 分段式分页(每页内分为多段)归根结底是对数据集做一次切割, 映射到mysql的sql语法上, 就是根据输入求得limit子句, 适用场景为数据集变化频率低 5) since_id类分页, 其本质是假定已有数据无变化, 将...

    PHP通用分页类page.php[仿google分页]

    5. 生成数字形式的分页链接,根据当前页码`$pg`和总页数`$page`动态调整显示的页码范围,以保持分页链接的简洁性。 6. 创建上一页`$backstr`和下一页`$nextstr`的链接。 辅助函数如`Pager::makepg()`用于创建数字...

    FleaPHP分页方法讲解

    `getLinks()`方法会根据当前页码和总页数自动生成相应的HTML代码,你还可以自定义链接样式和结构,以适应不同的设计需求。 除了基本的分页功能,`extPager.php`还可能包含其他实用方法,如限制查询结果范围,这在...

    一个分页代码

    从给定的PHP分页代码片段中,我们可以深入解析并理解其核心功能和实现机制,以下是对该分页代码的详细分析与知识点提取。 ### 分页功能概述 分页是Web开发中的常见需求,用于处理大量数据时的展示问题,避免一次性...

    功能强大的php分页函数

    当用户请求特定页码时,通过内容截取展示对应范围内的内容。这种方法简单,但存在一个问题,即文章内容通常包含HTML标签,如果在截取时处理不当,可能导致HTML标签不完整,影响页面显示效果。 2. **通过分页符进行...

    php 分页函数multi() discuz

    同时,它也考虑到了边缘情况,如当用户请求的页码超出实际页数时,会自动调整到正确的范围。 在实际应用中,你可以将此函数整合到自己的PHP项目中,只需提供对应的数据总数、每页显示数量、当前页码以及分页链接的...

    php相当简单的分页类

    `Helper_Page` 类就是一个简单的PHP分页类示例,它的设计目的是提供方便的方法来计算总页数、获取当前页信息以及进行页面跳转。 1. **类属性**: - `$infoCount`: 存储总信息或记录数。 - `$pageCount`: 存储总...

    复杂检索数据并分页显示的处理方法

    5. 分页处理:根据总记录数计算出总页数,并根据用户的请求参数(如`$offset`)确定当前页码及显示的记录范围。例如,每页显示20条记录,那么`$pages = ceil($rcon / 20)`。 6. 输出分页链接:使用PHP代码生成上一...

    一个很不错的PHP翻页类

    在实际应用中,你可以通过实例化此类或调用`pageft()`函数,结合你的数据库查询结果和页面布局,即可实现动态的分页效果。需要注意的是,为了提高用户体验,你还可以进一步优化此类,例如添加CSS样式支持,使其更...

    pdf 教程 fPdf中文补丁

    4. **自动分页**:当内容超出页面范围时,FPdf会自动进行分页,确保内容完整呈现。 5. **文本处理**:支持自动换行、对齐方式(左对齐、居中、右对齐),以及多种字体和样式,使得文本排版更加美观。 6. **图像支持*...

    php中的四舍五入函数代码(floor函数、ceil函数、round与intval)

    在PHP中,floor和ceil函数常用于分页场景下的页码计算,round函数用于需要按照特定精度进行四舍五入的场景,而intval函数用于将不同类型的变量转换为整数。这些函数各有适用场景,选择合适的函数可以提高代码的效率...

Global site tag (gtag.js) - Google Analytics