PHP分页类
时间:2008-12-03
来源:互联网
分页程序,需要的朋友拿去!
class Page {
// public param
public $pageName = 'page'; // 默认 page 标签,即 filename.php?pageName=4 中的 pageName
public $prevPage = ''; // 下一页
public $prevBar = '>'; // 下一分页条
// 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 functi**** -----------------------------------------------------------------
// 构造函数 初始化分页变量
// @param $nums int 总记录数
// @param $per int 每页显示记录数
// @param $now int 当前页数
// @param $url string url前缀 默认为空
public function __c****truct($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) _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->_barNum), $this->prevBar, 'prevbar');
}
}
// 下一分页条
public function getNextBar() {
// 末端不大于总页数
if(($this->_nowPage - $this->_preNow + $this->_barNum) _totalPage) {
return $this->_setLink($this->_setUrl($this->_nowPage + $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 _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 functi**** ----------------------------------------------------------------
//
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');
class Page {
// public param
public $pageName = 'page'; // 默认 page 标签,即 filename.php?pageName=4 中的 pageName
public $prevPage = ''; // 下一页
public $prevBar = '>'; // 下一分页条
// 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 functi**** -----------------------------------------------------------------
// 构造函数 初始化分页变量
// @param $nums int 总记录数
// @param $per int 每页显示记录数
// @param $now int 当前页数
// @param $url string url前缀 默认为空
public function __c****truct($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) _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->_barNum), $this->prevBar, 'prevbar');
}
}
// 下一分页条
public function getNextBar() {
// 末端不大于总页数
if(($this->_nowPage - $this->_preNow + $this->_barNum) _totalPage) {
return $this->_setLink($this->_setUrl($this->_nowPage + $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 _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 functi**** ----------------------------------------------------------------
//
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');
作者: Akill 发布时间: 2008-12-03
晕,楼主讲一下怎么用呢
作者: carlxxx 发布时间: 2008-12-03
下边不是调用方法吗,实例化传递参数,不会用类的先看看类的语法
作者: Akill 发布时间: 2008-12-03
LZ说的有理哦
作者: 蓝水宝盒 发布时间: 2008-12-03
smarty来的呀,还要配置好SMARTY才能用的
作者: a138s 发布时间: 2008-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28