PHP:分页类(比较庞大不建议在项目中用)
文章来源:http://www.cnblogs.com/hello-tl/p/7685178.html
<?php
//地址
//page::$url='';
//每页的条数 默认10
//page::$Page=1;
//每页显示的章 单数 1=1 2=3 4=5
//page::$perPage=8;
//需要查询的数据库
//page::$table='table1';
//需要联合查询的数据库 数组形式
//page::$Union=['table2','table3'];
//条件 数组形式 ['数据表'=>'条件'] where 唯默认
//page::$where=['where'=>'display = 1'];
//排序 数组形式 ['数据表'=>'id desc[升序|降序]'] orderby 唯默认
//page::$order=['orderby'=>'id desc'];
//需要查询的字段 数组形式 ['数据表' => '字段 [字符串形式]'] 默认 *
//page::$fields=['table1'=>'id,title','table2'=>'id,title','table3'=>'id,title'];
//获取分页
//$list = page::page();
//获取数据集
//$data=page::$data
class TL_Pagination{
public static $conn;
public static $result; //数据库资源
/**
* @var array mysqli链接配置
*/
public static $Mysql_config=[
'server'=>'localhost', //服务器 链接地址 默认localhost
'user'=>'root', //用户名 默认root
'pwd'=>'root', //密码
'name'=>'table', //数据库名称
'character' => 'utf8_general_ci', //数据库字符集
];
public static $links; //分页资源
public static $sql; //被执行的sql
public static $data; //数据资源
public static $url; //链接地址 处域名之外之后的所有参数 默认此网站域名
public static $Theurl; //网站域名
public static $total=0; //总条数
public static $Page=10; //每页显示的条数
public static $perPage=11; //每页显示的章 单数 1=1 2=3 4=5
public static $count; //共多少页
public static $table; //被分页的表
/**
* @var array
* 使用联合查询 字段必须一样
* ['需要条件的字段'=>'字符串形式','where-所有的都一样'=>'字符串形式']
*/
public static $where=[
'where'=>'0=0'
]; //条件
/**
* @var array
* ['表1','表2']
*/
public static $Union=[]; //联合查询
/**
* @var array
* 使用联合查询 字段必须一样
* ['要查询的字段']
*/
public static $fields=[]; //字段
/**
* @var array 数组类型
* [键值数据表 => 字段 升序|降序]
* $order['orderby'] 是放在最后的排序
*/
public static $order = []; //排序
public static $firstItemUrlClassno = "<li class='disabled'><span>««</span></li>";//如果没有最前一项
public static $firstItemUrlClasslt = "<li><a href='";//最前一项标签开始
public static $firstItemUrl;//最前一项
public static $firstItemUrlClassgt = "' rel='prev'>««</a></li>";//最前一项标签结尾
public static $nextPageUrlClassno = "<li class='disabled'><span>«</span></li>";//如果没有上一页
public static $nextPageUrlClasslt = "<li><a href='";//上一页标签开始
public static $nextPageUrl;//上一页
public static $nextPageUrlClassgt = "' rel='prev'>«</a></li>";//上一页标签结尾
public static $beforeandafterUrlClasslt="<li><a href='";//当前页码之前 和 当前页码之后开始
public static $beforePageUrlsize=0;//当前页码之前页数
public static $beforePageUrl;//当前页码之前
public static $afterPageUrl;//当前页码之后
public static $afterPageUrlsize=0;//当前页码之后页数
public static $beforeandafterUrlClassgt="</a></li>";//当前页码之前 和 当前页码之后结尾
public static $currentPageUrlClasslt = "<li class='active'><span style='color:#ffffff'>";//当前页码标签开始
public static $currentPage;//当前页码
public static $currentPageUrl;//当前
public static $currentPageUrlClassgt = "</span></li>";//当前页码标签结尾
public static $comprehensiveUrlClasslt="<li><a href='";//如果每页显示的分页数量大于或者等于总数量的时候直接调用他组合
public static $comprehensiveUrl;//如果每页显示的分页数量大于或者等于总数量的时候直接调用他组合
public static $comprehensiveUrlClassgt="</a></li>";//如果每页显示的分页数量大于或者等于总数量的时候直接调用他组合
public static $previousPageUrlClassno = "<li class='disabled'><span>»</span></li>";//如果没有下一页
public static $previousPageUrlClasslt = "<li><a href='";//下一页标签开始
public static $previousPageUrl;//下一页
public static $previousPageUrlClassgt = "' rel='next'>»</a></li>";//下一页标签结尾
public static $lastItemUrlClassno = "<li class='disabled'><span>»»</span></li>";//如果没有最前一项
public static $lastItemUrlClasslt = "<li><a href='";//最前一项标签开始
public static $lastItemUrl;//最后一页
public static $lastItemUrlClassgt = "' rel='prev'>»»</a></li>";//最后一页标签结尾
public static $hasMorePages="<li class='disabled'><a href='javascript:;'>...</a></li>";//更多的页码
public static $hasMorePagesleft; //左侧更多的页码
public static $hasMorePagesright;//右侧更多的页码
public static function page(){
self::$currentPage=isset($_GET['page']) ? $_GET['page'] : "1";
self::$Theurl = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] ;//网址
self::mysqli(); //链接数据库
self::data(); //数据资源
self::total(); //总条数
self::count(); //共多少页
self::firstItemUrl(); //最前一项
self::nextPageUrl(); //上一页
if(self::$count>self::$perPage){
self::leftandright(); //左边右边显示多少条处理
self::beforePageUrl(); //当前页码之前
self::currentPageUrl(); //当前页码
self::afterPageUrlsize(); //当前页码之后
}else{
self::comprehensive(); //综合全部显示
}
self::previousPageUrl(); //下一页
self::lastItemUrl(); //最后一项
if(self::$count>self::$perPage){
return self::combination(); //组合
}else{
return self::combinations(); //组合
}
}
public static function combinations(){
return self::$firstItemUrl . //最前一项
self::$nextPageUrl . //上一页
self::$comprehensiveUrl . //中间页码
self::$previousPageUrl . //下一页
self::$lastItemUrl; //最后一项
}
public static function combination(){
return self::$firstItemUrl . //最前一项
self::$nextPageUrl . //上一页
self::$hasMorePagesleft . //左侧更多页码
self::$beforePageUrl . //当前页码之前
self::$currentPageUrl . //当前页码
self::$afterPageUrl . //当前页码之后
self::$hasMorePagesright . //右侧更多页码
self::$previousPageUrl . //下一页
self::$lastItemUrl; //最后一项
}
public static function mysqli(){
self::$conn = mysqli_connect(!empty(self::$Mysql_config['server']) ? self::$Mysql_config['server'] : 'localhost' , !empty(self::$Mysql_config['user']) ? self::$Mysql_config['user'] : 'root' , self::$Mysql_config['pwd']);
mysqli_select_db(self::$conn,self::$Mysql_config['name']);
mysqli_query(self::$conn,!empty($Mysql_config['character']) ? $Mysql_config['character'] : 'utf8_general_ci');
}
//的出sql语句
public static function data(){
//判断是否有 条件 如果没有 null
$order = isset(self::$order[self::$table]) ? " ORDER BY " . self::$order[self::$table]:null;
//判断是否有 字段 如果没有 *
$field = isset(self::$fields[self::$table]) ? self::$fields[self::$table] : '*';
//判断是否有 条件 如果没有 where 0=0
$where = isset(self::$where[self::$table]) ? self::$where[self::$table] : " WHERE " . self::$where['where'];
//第一条sql语句
self::$sql = "(SELECT " . $field . " FROM " . self::$table . $where . $order . ")";
//循环对接sql
foreach (self::$Union as $key => $value){
//判断是否有 条件 如果没有 null
$order = isset(self::$order[$value]) ? " ORDER BY " . self::$order[$value]:null;
//判断是否有 条件 如果没有 where 0=0
$where = isset(self::$where[$value]) ? self::$where[$value] : " WHERE " . self::$where['where'];
//判断是否有 字段 如果没有 *
$field = isset(self::$fields[$value]) ? self::$fields[$value] : '*';
//sql语句拼接
self::$sql .=" union (SELECT " . $field . " FROM " . $value . $where . $order . ")";
}
//判断 是否有排序
if(isset(self::$order['orderby'])){
self::$sql .= " ORDER BY " . self::$order['orderby'];
}
//执行的sql语句
self::$sql .= " limit " . ((self::$currentPage-1) * self::$Page) . "," . self::$Page;
//返回结果
self::$data = self::Mysql_query(self::$sql);
}
//获取总条数
public static function total(){
//判断是否有 条件 如果没有 where 0=0
$where = isset(self::$where[self::$table]) ? self::$where[self::$table]:" WHERE ".self::$where['where'];
//第一条sql语句
$sql = "(SELECT count(*) as num FROM " . self::$table . $where .")";
foreach (self::$Union as $key => $value){
//判断是否有 条件 如果没有 where 0=0
$where = isset(self::$where[$value]) ? self::$where[$value]:" WHERE " . self::$where['where'];
//sql语句拼接
$sql .=" union (SELECT count(*) as num FROM " . $value . $where . ")";
}
$array = self::Mysql_query($sql);
foreach ($array as $key=>$value){
self::$total=self::$total+$value['num'];
}
}
//共多少页
public static function count(){
$count = self::$total / self::$Page;
self::$count = ceil($count);
}
//最前一页
public static function firstItemUrl(){
if(self::$currentPage == 1){
self::$firstItemUrl = self::$firstItemUrlClassno;
}else{
self::$firstItemUrl = self::$firstItemUrlClasslt . self::$Theurl . self::$url . "?page=1". self::$firstItemUrlClassgt;
}
}
//最后一项
public static function lastItemUrl(){
if(self::$currentPage == self::$count){
self::$lastItemUrl = self::$lastItemUrlClassno;
}else{
self::$lastItemUrl = self::$lastItemUrlClasslt . self::$Theurl . self::$url . "?page=" . self::$count . self::$lastItemUrlClassgt;
}
}
//上一页
public static function nextPageUrl(){
if(self::$currentPage == 1){
self::$nextPageUrl = self::$nextPageUrlClassno;
}else{
$next = self::$currentPage - 1;
self::$nextPageUrl = self::$nextPageUrlClasslt . self::$Theurl . self::$url . "?page=" . $next . self::$nextPageUrlClassgt;
}
}
//下一页
public static function previousPageUrl(){
if(self::$currentPage == self::$count){
self::$previousPageUrl = self::$previousPageUrlClassno;
}else{
$previous = self::$currentPage + 1;
self::$previousPageUrl = self::$previousPageUrlClasslt . self::$Theurl . self::$url . "?page=" . $previous . self::$previousPageUrlClassgt;
}
}
//当前页码
public static function currentPageUrl(){
self::$currentPageUrl = self::$currentPageUrlClasslt . self::$currentPage . self::$currentPageUrlClassgt;
}
//如果每页显示的分页数量大于或者等于总数量的时候直接调用他组合
public static function comprehensive(){
for($i=1;$i<self::$count+1;$i++){
if($i==self::$currentPage){
self::$comprehensiveUrl .= self::$currentPageUrlClasslt . self::$currentPage . self::$currentPageUrlClassgt;
}else{
self::$comprehensiveUrl .= self::$comprehensiveUrlClasslt . self::$Theurl . self::$url . "?page=" . $i . "'>" . $i . self::$comprehensiveUrlClassgt;
}
}
}
//当前页之前
public static function beforePageUrl(){
for($i=(self::$currentPage-self::$beforePageUrlsize);$i<self::$currentPage&&$i>0;$i++){
self::$beforePageUrl .= self::$beforeandafterUrlClasslt . self::$Theurl . self::$url . "?page=" . $i . "'>" . $i . self::$beforeandafterUrlClassgt;
}
if((self::$currentPage-self::$beforePageUrlsize-1)>1){
self::$hasMorePagesleft=self::$hasMorePages;
}
}
//当前页之后
public static function afterPageUrlsize(){
for($i=(self::$currentPage+1);$i<(self::$currentPage+self::$afterPageUrlsize+1)&&$i<self::$count+1;$i++){
self::$afterPageUrl.=self::$beforeandafterUrlClasslt. self::$Theurl . self::$url . "?page=" . $i . "'>" . $i . self::$beforeandafterUrlClassgt;
}
if((self::$currentPage+self::$afterPageUrlsize+1)<self::$count){
self::$hasMorePagesright=self::$hasMorePages;
}
}
//左边右边显示多少条处理
public static function leftandright(){
if(self::$perPage%2 == 0) self::$perPage++;
$perPage = (self::$perPage-1) / 2;
$beforePageUrl = $perPage;
$afterPageUrl = $perPage;
//左边
if(self::$currentPage == 1){
//给右边页码 + $afterPageUrl
$afterPageUrl = $afterPageUrl + $beforePageUrl;
//左边0
$beforePageUrl = 0;
}elseif(self::$currentPage - $beforePageUrl > 0){
$beforePageUrl = $beforePageUrl;
}elseif(self::$currentPage == $beforePageUrl) {
$beforePageUrl = $beforePageUrl - 1;
$afterPageUrl = $afterPageUrl + 1;
}else{
$afterPageUrl = $afterPageUrl + ($beforePageUrl - ($beforePageUrl-self::$currentPage));
$beforePageUrl = $beforePageUrl + (self::$currentPage - $beforePageUrl-1);
}
//右边
if(self::$currentPage == self::$count){
//给右页码 + $afterPageUrl
$beforePageUrl = $beforePageUrl + $afterPageUrl;
$afterPageUrl = 0;
}elseif(self::$currentPage+$afterPageUrl < self::$count){
$afterPageUrl = $afterPageUrl;
}elseif(self::$currentPage + $afterPageUrl == self::$count){
$afterPageUrl = $afterPageUrl;
}else{
$beforePageUrl = $afterPageUrl - (self::$count - ($afterPageUrl + self::$currentPage));
$afterPageUrl = ($afterPageUrl + self::$currentPage) - self::$count;
}
self::$beforePageUrlsize = $beforePageUrl;
self::$afterPageUrlsize = $afterPageUrl;
}
/**
* 执行一条sql语句
* @param [type] $sql [description] sql语句
* @return [type] [description]
*/
public static function Mysql_query($sql=""){
if(!empty($sql)){
$result=mysqli_query(self::$conn,$sql);
self::$result = $result;
return self::Mysql_array(self::$result);
}
}
/**
* 返回一个二维数组
* @param [type] $array [description] 执行过的sql语句
*/
public static function Mysql_array($array=""){
if(!empty($array)){
$result=array();
while($row = mysqli_fetch_array($array,MYSQLI_ASSOC)){
$result[] = $row;
}
return self::conversion($result,'gb2312','utf-8');
}
}
/**
* [encodeConvert description] 字符集转换
* @param [type] $str [description] 数组
* @param [type] $fromCode [description] gb2312
* @param [type] $toCode [description] utf-8
* @return [type] [description]
*/
public static function conversion($str,$fromCode,$toCode){
if(strtoupper($toCode) == strtoupper($fromCode)) return $str;
if(is_string($str)){
if(function_exists('mb_convert_encoding')){
return mb_convert_encoding($str,$toCode,$fromCode);
}
else{
return iconv($fromCode,$toCode,$str);
}
}elseif(is_array($str)){
foreach($str as $k=>$v){
$str[$k] = self::conversion($v,$fromCode,$toCode);
}
return $str;
}
return $str;
}
//释放资源
public static function Mysql_rows_result(){
return mysqli_free_result(self::$result);
}
//析构函数,自动关闭数据库,垃圾回收机制
public function __destruct(){
if(!empty(self::$result)){
self::Mysql_rows_result();
}
return mysqli_close(self::$conn);
}
}
文章来源:http://www.cnblogs.com/hello-tl/p/7685178.html
PHP:分页类(比较庞大不建议在项目中用)的更多相关文章
- php实现的分页类
php分页类文件: <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 pr ...
- asp.net的快捷实用分页类
KeleyiPager分页类,可以于对列表页进行分页浏览,代码是从HoverTreeCMS项目中COPY的,感觉很不错,使用简单方便,但是功能强大. 在线体验效果:http://cms.hovertr ...
- php分页类
1.需求 学会php分页类的使用 2.参考例子 CI的分页类 3.代码部分 <?php class pagination{ public $pagesize=20; public $pagein ...
- PHPCMS V9 分页类的修改教程
首先,打开 phpcms\libs\functions\global.func.php 这个文件,找到文件第622行的分页函数,复制一下,粘贴到默认分页函数的下面,重新命名后保存.(笔者在此命名为:p ...
- php 简单分页类
/** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 privat ...
- PHP简单漂亮的分页类
本文介绍一款原生的PHP分页类,分页样式有点类似bootstrap. <?php /* * ********************************************* * @类名 ...
- ThinkPHP 分页类的使用及退出功能的实现
/* ThinkPHP设置编码统一: 一.数据库设置为utf8_bin 二.HTML页面设置charset=utf-8,而且检查文档编码格式是否是utf-8.phpDesigner8设置方式为“文件- ...
- php部分---一个分页类、用法
1.分页类 <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 privat ...
- DedeCMS织梦动态分页类,datalist标签使用实例
<?php require_once(dirname(__FILE__)."/include/common.inc.php");//载入基础文件 require_once(D ...
随机推荐
- Ocelot(九)- 教你如何配置Ocelot?
配置 可以在此处找到示例配置.配置有两个部分.一组ReRoutes和一个GlobalConfiguration.ReRoutes是告诉Ocelot如何处理上游请求的对象.全局配置有点hacky并允许覆 ...
- elasticsearch全文搜索
1.创建索引 PUT 192.168.100.102:9200/news 2.创建mapping POST 192.168.100.102:9200/news/new/_mapping { " ...
- php安装的扩展php -m可以看到,但是phpinfo()看不到,php-fpm关闭了重新打开还是不行?
问答 问答详情 php安装的扩展php -m可以看到,但是phpinfo()看不到,php-fpm关闭了重新打开还是不行? centos apache linux html php 3.2k 次浏 ...
- python之对堆栈、队列处理操作(转载+个人看法)
参考链接:https://blog.csdn.net/u010786109/article/details/40649827 python实现堆栈操作 堆栈是一个后进先出的数据结构,其工作方式就像一堆 ...
- Qt之程序发布以及打包成exe安装包
一.简述 Qt项目开发完成之后,需要打包发布程序,而因为用户电脑上没有Qt配置环境,所以需要将release生成的exe文件和所依赖的dll文件复制到一个文件夹中,然后再用 Inno Setup打包工 ...
- BZOJ2333 棘手的操作
Description 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 x ...
- 尺取法 POJ 3320 Jessica's Reading Problem
题目传送门 /* 尺取法:先求出不同知识点的总个数tot,然后以获得知识点的个数作为界限, 更新最小值 */ #include <cstdio> #include <cmath> ...
- C#DataTable学习心得[转]
一.DataSet.DataTable.DataRow.DataColumn 1] 在DataSet中添加DataTable DataSet.Tables.Add(DataTable) 实例: Dat ...
- 嵌套查询--------关联一对多关系----------collection
参考来源: http://www.cnblogs.com/LvLoveYuForever/p/6689577.html <resultMap id="BaseResultMap&q ...
- 2、IO流的分类和IO流体系