PHP分页处理

V站笔记

**
* 获取当前url
* @return string
*/
function getUrl()
{
$url = ”;
$url .= $_SERVER[‘SERVER_PORT’] == 443 ? ‘https://’ : ‘http://’;
$url .= $_SERVER[‘HTTP_HOST’];
$url .= $_SERVER[‘REQUEST_URI’];
return $url;
}
/**
* 根据page生成url
* @param $page
* @param string $url
* @return string
*/
function pageUrl($page, $url = ”)
{
$url = empty($url) ? getUrl() : $url;
//查询url中是否存在?
$pos = strpos($url, ‘?’);
if($pos === false)
{
$url .= ‘?page=’ . $page;
}
else
{
$queryString = substr($url, $pos + 1);
//解析querystring为数组
parse_str($queryString, $queryArr);
if(isset($queryArr[‘page’]))
{
unset($queryArr[‘page’]);
}
$queryArr[‘page’] = $page;
//将queryArr重新拼接成queryString
$queryStr = http_build_query($queryArr);
$url = substr($url, 0, $pos) . ‘?’ . $queryStr;
}
return $url;
}
/**
* 分页显示
* @param int $total 数据总数
* @param int $currentPage 当前页
* @param int $pageSize 每页显示条数
* @param int $show 显示按钮数
* @return string
*/
function pages($total, $currentPage, $pageSize, $show = 6)
{
$pageStr = ”;
//仅当总数大于每页显示条数 才进行分页处理
if($total > $pageSize)
{
//总页数
$totalPage = ceil($total / $pageSize);//向上取整 获取总页数
//对当前页进行处理
$currentPage = $currentPage > $totalPage ? $totalPage : $currentPage;
//分页起始页
$from = max(1, ($currentPage – intval($show / 2)));
//分页结束页
$to = $from + $show – 1;
$pageStr .= ‘<div class=”page-nav”>’;
$pageStr .= ‘<ul>’;
//仅当 当前页大于1的时候 存在 首页和上一页按钮
if($currentPage > 1)
{
$pageStr .= “<li><a href='” . pageUrl(1) . “‘>首页</a></li>”;
$pageStr .= “<li><a href='” . pageUrl($currentPage – 1) . “‘>上一页</a></li>”;
}
//当结束页大于总页
if($to > $totalPage)
{
$to = $totalPage;
$from = max(1, $to – $show + 1);
}
if($from > 1)
{
$pageStr .= ‘<li>…</li>’;
}
for($i = $from; $i <= $to; $i++)
{
if($i != $currentPage)
{
$pageStr .= “<li><a href='” . pageUrl($i) . “‘>{$i}</a></li>”;
}
else
{
$pageStr .= “<li><span class=’curr-page’>{$i}</span></li>”;
}
}
if($to < $totalPage)
{
$pageStr .= ‘<li>…</li>’;
}
if($currentPage < $totalPage)
{
$pageStr .= “<li><a href='” . pageUrl($currentPage + 1) . “‘>下一页</a></li>”;
$pageStr .= “<li><a href='” . pageUrl($totalPage) . “‘>尾页</a></li>”;
}
$pageStr .= ‘</ul>’;
$pageStr .= ‘</div>’;
}
return $pageStr;
}

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5287
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2050
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31410
来自专栏魂祭心

原 canvas绘制clock

4054
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2958
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2547
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2526
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4848

扫码关注云+社区