热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php分页类程序员-PHP源码

ec(2);classPage{   publicparam   public$pageName   page;  默认page标签,即filename.php?pageName4中的pageName  &

class Page {
// public param
public $pageName = 'page'; // 默认 page 标签,即 filename.php?pageName=4 中的 pageName
public $prevPage = '<'; // 上一页
public $nextPage = '>'; // 下一页
public $prevBar = '<<'; // 上一分页条
public $nextBar = '>>'; // 下一分页条
// private param
private $_totalNums = 1; // 总记录数
private $_barNum = 10; // 分页条显示分页个数
private $_totalPage = 0; // 总页数
private $_nowPage = 1; // 当前页
private $_perPage = 10; // 每页显示记录数
private $_preUrl = ''; // url 前缀
private $_preNow = 0; // 当前页前显示分页个数 (范围应该是 0 至 $_barNum-1)
private $_fromPage = 0; // 分页条起点
private $_toPage = 0; // 分页条末端
private $_offset = 0; // sql 查询记录偏移量
// public functions -----------------------------------------------------------------
// 构造函数 初始化分页变量
// @param $nums int 总记录数
// @param $per int 每页显示记录数
// @param $now int 当前页数
// @param $url string url前缀 默认为空
public function __construct($nums, $per = '', $preNow = '', $barNum = '', $now = '', $url = '') {
// 初始化
$this->_set($nums, $per, $preNow, $barNum, $now, $url);
$this->_totalPage = ceil($this->_totalNums/$this->_perPage);
$this->_offset = ($this->_nowPage - 1) * $this->_perPage;
}
// 上一页
public function getPrevPage() {
// 当前页不是第一页
if($this->_nowPage > 1) {
return $this->_setLink($this->_setUrl($this->_nowPage - 1), $this->prevPage, 'prevpage');
}
}
// 下一页
public function getNextPage() {
// 当前页小于总页数
if($this->_nowPage <$this->_totalPage) {
return $this->_setLink($this->_setUrl($this->_nowPage + 1), $this->nextPage, 'nextpage');
}
}
// 第一页
public function getFirstPage() {
// 起点不是第一页
if(($this->_nowPage - $this->_preNow) > 1) {
return $this->_setLink($this->_setUrl(1), '1...', 'firstpage');
}
}
// 最后一页
public function getLastPage() {
// 末端不大于总页数
if(($this->_nowPage - $this->_preNow + $this->_barNum) <= $this->_totalPage) {
return $this->_setLink($this->_setUrl($this->_totalPage), '...' . $this->_totalPage, 'lastpage');
}
}
// 上一分页条
public function getPrevBar() {
// 起点大于一个分页条数
if(($this->_nowPage - $this->_preNow) > $this->_barNum) {
return $this->_setLink($this->_setUrl(($this->_nowPage - $this->_preNow) - $this->_barNum), $this->prevBar, 'prevbar');
}
}
// 下一分页条
public function getNextBar() {
// 末端不大于总页数
if(($this->_nowPage - $this->_preNow + $this->_barNum) <= $this->_totalPage) {
return $this->_setLink($this->_setUrl($this->_fromPage + $this->_barNum), $this->nextBar, 'nextbar');
}
}
// 分页条
public function pageBar() {
// 初始化分页条的始末端点
$this->_toPage = $this->_nowPage + ($this->_barNum - $this->_preNow - 1);
if($this->_toPage > $this->_totalPage) {
$this->_preNow = $this->_barNum - ($this->_totalPage - $this->_nowPage + 1);
$this->_toPage = $this->_totalPage;
}
if($this->_toPage <$this->_barNum) {
$this->_toPage = $this->_barNum;
}
$this->_fromPage = $this->_nowPage - $this->_preNow;
if($this->_fromPage <1) {
$this->_fromPage = 1;
}
// 初始化分页条
$return = '';
for($i = $this->_fromPage; $i <= $this->_toPage; $i++) {
if($i != $this->_nowPage) {
$return .= $this->_setLink($this->_setUrl($i), $i, 'page');
} else {
$return .= '' . $i . '';
}
}
return $return;
}
// 返回偏移量 用于 sql 查询
public function getOffset() {
return $this->_offset;
}
// 返回总记录数
public function getTotalNums() {
return '' . $this->_totalNums . '';
}
// 显示分页
public function showPage() {
return $this->getTotalNums() . $this->getFirstPage() . $this->getPrevBar() . $this->getPrevPage() . $this->pageBar() . $this->getNextPage() . $this->getNextBar() . $this->getLastPage();
}
// private functions ----------------------------------------------------------------
//
private function _set($nums, $per, $preNow, $barNum, $now, $url) {
// 设置总记录数
if($nums > 0) {
$this->_totalNums = $nums;
}
// 设置每页显示记录数
if($per > 0) {
$this->_perPage = $per;
}
// 设置当前页前显示分页个数
if($preNow > 0) {
$this->_preNow = $preNow;
}
// 设置分页条链接个数
if($barNum > 0) {
$this->_barNum = $barNum;
}
// 设置当前页
if(empty($now)) {
// 自动获取
if(isset($_GET[$this->pageName])) {
$this->_nowPage = intval($_GET[$this->pageName]);
}
} else {
// $now 已手动处理
$this->_nowPage = intval($now); //
}
// 设置 url 前缀
if(!empty($url)) {
// $url 已手动处理
$this->_preUrl = $url . (stristr($url, '?') ? '&' : '?') . $this->pageName . '=';
} else {
// 自动获取
if(empty($_SERVER['QUERY_STRING'])) {
// url 中不存在查询
$this->_preUrl = $_SERVER['REQUEST_URI'] . '?' . $this->pageName . '=';
} else {
if(stristr($_SERVER['QUERY_STRING'], $this->pageName . '=')) {
// 查询中有 page=n(2,3...)
$this->_preUrl = str_replace($this->pageName . '=' . $this->_nowPage, '', $_SERVER['REQUEST_URI']);
$lastCharacter = $this->_preUrl[strlen($this->_preUrl) - 1];
if($lastCharacter == '?' || $lastCharacter == '&') {
// page=n(2,3...) 在原 url 的末尾
$this->_preUrl .= $this->pageName . '=';
} else {
// page=n(2,3...) 不在原 url 的末尾
$this->_preUrl .= '&' . $this->pageName . '=';
}
} else {
// 查询中没有 page=n(2,3...)
$this->preUrl = $_SERVER['REQUEST_URI'] . '&' . $this->pageName . '=';
}
}
}
}
// 设置链接地址
private function _setUrl($pageNo) {
return $this->_preUrl . $pageNo;
}
// 设置链接
private function _setLink($url, $link, $style = '') {
$style = 'class="' . $style . '"';
return '' . $link . '';
}
}
//

使用方法

$total = 1245;
//class Page($nums, $per = '', $preNow = '', $barNum = '', $now = '', $url = '')
$page = new Page($total);
$pager = $page->showPage();
$smarty->assign('pager', $pager);
$smarty->display('index.tpl');

推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文介绍了一个基于 Java SpringMVC 和 SSM 框架的综合系统,涵盖了操作日志记录、文件管理、头像编辑、权限控制、以及多种技术集成如 Shiro、Redis 等,旨在提供一个高效且功能丰富的开发平台。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
author-avatar
UP向日葵氵于磊Z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有