2015-05-27
今天是学习做后台页面布局,用得是bootcss。那么效果展示一下。
布局的代码
[html] %20<!DOCTYPE%20html>
<html%20lang="en">
<head>
%20<meta%20http-equiv="Content-Type"%20content="text/html;%20charset=utf-8"%20/>
%20<title>无标题文档</title>
%20<link%20rel="stylesheet"%20type="text/css"%20href="css/bootstrap.min.css"></head>
<body>
%20<div%20class="container-fluid">
%20<div%20class="row-fluid">
%20<div%20class="span4">
%20<h3>瀑布流留言板管理系统</h3>
%20</div>
%20</div>
%20<div%20class="row-fluid">
%20<div%20id="menu"%20class="span2">
%20<ul%20class="nav%20nav-list">
%20<li%20class="nav-header">留言管理</li>
%20<li%20class="active">
%20<a%20id="start"%20href="javascript:void(0);">所有留言</a>
%20</li>
%20<li%20class="nav-header">网站管理</li>
%20<li%20class="">
%20<a%20href="javascript:void(0);">基本设置</a>
%20</li>
%20</ul>
%20</div>
%20<div%20id="main"%20class="span10">
%20<div%20id="mainData"></div>
%20</div>
%20</div>
%20</div>
</body>
%20<script%20src="js/jquery-2.0.1.min.js"></script>
%20<script%20type="text/javascript"%20src="js/bootstrap.min.js"></script>
%20<script%20type="text/javascript"%20src="js/admin.js"></script>
</html>
<!DOCTYPE%20html>
<html%20lang="en">
<head>
%20<meta%20http-equiv="Content-Type"%20content="text/html;%20charset=utf-8"%20/>
%20<title>无标题文档</title>
%20<link%20rel="stylesheet"%20type="text/css"%20href="css/bootstrap.min.css"></head>
<body>
%20<div%20class="container-fluid">
%20<div%20class="row-fluid">
%20<div%20class="span4">
%20<h3>瀑布流留言板管理系统</h3>
%20</div>
%20</div>
%20<div%20class="row-fluid">
%20<div%20id="menu"%20class="span2">
%20<ul%20class="nav%20nav-list">
%20<li%20class="nav-header">留言管理</li>
%20<li%20class="active">
%20<a%20id="start"%20href="javascript:void(0);">所有留言</a>
%20</li>
%20<li%20class="nav-header">网站管理</li>
%20<li%20class="">
%20<a%20href="javascript:void(0);">基本设置</a>
%20</li>
%20</ul>
%20</div>
%20<div%20id="main"%20class="span10">
%20<div%20id="mainData"></div>
%20</div>
%20</div>
%20</div>
</body>
%20<script%20src="js/jquery-2.0.1.min.js"></script>
%20<script%20type="text/javascript"%20src="js/bootstrap.min.js"></script>
%20<script%20type="text/javascript"%20src="js/admin.js"></script>
</html>
从中学到javascript函数
str.substr(0,20)意思是从0个字符开始取20个字符
Math.random()取随机数
switch语句
这后台是ajax的噢。写了好久的分页呢。好吧,直接上代码。
[javascript] %20//%20JavaScript%20Document
$('body').off('.data-api');
$(document).ready(function(e)%20{
%20$("#menu%20a").click(function()%20{
%20switch%20($(this).text())%20{
%20case%20'所有留言':
%20admin_content(1);
%20break;
%20case%20'基本设置':
%20$("#main%20#mainData").load('admin_config.html?r='+Math.random());
%20break;
%20default:
%20break;
%20}
%20});
%20$("#start").click();
});
/**
*留言管理
*/
function%20admin_content(page)%20{
%20$.ajax({
%20url:%20'http://localhost/l/admin.php?m=admin&a=content&page='%20+%20page%20+%20'&rand='%20+%20Math.random(),
%20type:%20'get',
%20dataType:%20'json',
%20data:%20{},
%20complete:%20function(xhr,%20textStatus)%20{
%20//called%20when%20complete
%20},
%20success:%20function(json,%20textStatus,%20xhr)%20{
%20if%20(json['state']%20==%20'ok')%20{
%20var%20page_start%20=%20json['start'];//分页开始
%20var%20page_end%20=%20json['end'];//分页结束
%20var%20page_page%20=%20json['page'];//分页当前页面
%20var%20data%20=%20json['data'];//分页数据
/**
*%20生成%20表格内容
*/
%20var%20table_html%20=%20'<table%20class="table%20table-hover"><tr><th>操作</th><th>用户名</th><th>留言内容</th><th>发表时间</th></tr>';
%20for%20(i%20=%200;%20i%20<%20data.length;%20i++)%20{
%20var%20trClass%20=%20(i%20%%202%20==%200)%20?%20'class="info"'%20:%20'';
%20var%20tr_html%20=%20'<tr%20'%20+%20trClass%20+%20'><td%20width=100><a%20href="javascript:admin_content_del('+data[i].id+');">删除</a></td><td%20width=100>'%20+%20data[i].userName%20+%20'</td><td%20width=400%20><div%20style="max-width:400px;max-height:150px;overflow-y:auto;">'%20+%20data[i].content%20+%20'</div></td><td%20>'%20+%20getLocalTime(data[i].time)%20+%20'</td></tr>';
%20table_html%20=%20table_html%20+%20tr_html;
%20}
%20table_html%20=%20table_html%20+%20'</table>';
/**
*生成分页
*/
%20var%20page_html%20=%20'<div%20id="mainPage"><div%20class="pagination"><ul>';
%20if%20(page_end%20!==%200)%20{
%20if%20(page_page%20==%201)%20{
%20page_html%20=%20page_html%20+%20'<li%20class="disabled"><a%20href="JavaScript:void(0);">«</a></li>';
%20}%20else%20{
%20page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">«</a></li>';
%20}
%20}
%20for%20(var%20i%20=%20page_start;%20i%20<=%20page_end;%20i++)%20{
%20if%20(page_page%20==%20i)%20{
%20page_html%20=%20page_html%20+%20'<li%20class="active"><a%20href="JavaScript:void(0);">'%20+%20i%20+%20'</a></li>';
%20}%20else%20{
%20page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">'%20+%20i%20+%20'</a></li>';
%20}
%20}
%20if%20(page_end%20!==%200)%20{
%20if%20(page_page%20==%20page_end)%20{
%20page_html%20=%20page_html%20+%20'<li%20class="disabled"><a%20href="JavaScript:void(0);">»</a></li>';
%20}%20else%20{
%20page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">»</a></li>';
%20}
%20}
%20page_html%20=%20page_html%20+%20'</ul></div></div>';
%20var%20mainData%20=%20$("#main%20#mainData");
%20mainData.html(table_html);
%20mainData.append(page_html);
%20admin_content_page(page_page,page_end);%20//挂接分页点击事件
%20}
%20//alert(json.data);
%20},
%20error:%20function(xhr,%20textStatus,%20errorThrown)%20{
%20//called%20when%20there%20is%20an%20error
%20}
%20});
}
/**
*%20挂机分页事件
*%20参数%20page_page%20当前分页
*%20参数%20page_end %20分页数量
*/
function%20admin_content_page(page_page,page_end)%20{
%20$("#mainPage%20a").click(function()%20{
%20var%20charStr%20=%20$(this).text();
%20var%20num%20=%20charStr;
%20if%20(charStr%20==%20"»")%20{
%20num%20=%20parseInt(page_page)%20+%201;
%20if%20(page_end%20<%20num)%20{
%20return;
%20}
%20}%20else%20if%20(charStr%20==%20"«")%20{
%20num%20=%20parseInt(page_page)%20-%201;
%20if%20(num%20<=%200)%20{
%20return;
%20}
%20}
%20admin_content(num);
%20});
}
function%20admin_content_del%20(id)%20{
%20alert(id);
}
function%20getLocalTime(nS)%20{
%20return%20new%20Date(parseInt(nS)%20*%201000).toLocaleString().replace(/:/d{1,2}$/,%20'%20');
}
//%20JavaScript%20Document
$('body').off('.data-api');
$(document).ready(function(e)%20{
$("#menu%20a").click(function()%20{
switch%20($(this).text())%20{
case%20'所有留言':
admin_content(1);
break;
case%20'基本设置':
$("#main%20#mainData").load('admin_config.html?r='+Math.random());
break;
default:
break;
}
});
$("#start").click();
});
/**
*留言管理
*/
function%20admin_content(page)%20{
$.ajax({
url:%20'http://localhost/l/admin.php?m=admin&a=content&page='%20+%20page%20+%20'&rand='%20+%20Math.random(),
type:%20'get',
dataType:%20'json',
data:%20{},
complete:%20function(xhr,%20textStatus)%20{
//called%20when%20complete
},
success:%20function(json,%20textStatus,%20xhr)%20{
if%20(json['state']%20==%20'ok')%20{
var%20page_start%20=%20json['start'];//分页开始
var%20page_end%20=%20json['end'];//分页结束
var%20page_page%20=%20json['page'];//分页当前页面
var%20data%20=%20json['data'];//分页数据
/**
*%20生成%20表格内容
*/
var%20table_html%20=%20'<table%20class="table%20table-hover"><tr><th>操作</th><th>用户名</th><th>留言内容</th><th>发表时间</th></tr>';
for%20(i%20=%200;%20i%20<%20data.length;%20i++)%20{
var%20trClass%20=%20(i%20%%202%20==%200)%20?%20'class="info"'%20:%20'';
var%20tr_html%20=%20'<tr%20'%20+%20trClass%20+%20'><td%20width=100><a%20href="javascript:admin_content_del('+data[i].id+');">删除</a></td><td%20width=100>'%20+%20data[i].userName%20+%20'</td><td%20width=400%20><div%20style="max-width:400px;max-height:150px;overflow-y:auto;">'%20+%20data[i].content%20+%20'</div></td><td%20>'%20+%20getLocalTime(data[i].time)%20+%20'</td></tr>';
table_html%20=%20table_html%20+%20tr_html;
}
table_html%20=%20table_html%20+%20'</table>';
/**
*生成分页
*/
var%20page_html%20=%20'<div%20id="mainPage"><div%20class="pagination"><ul>';
if%20(page_end%20!==%200)%20{
if%20(page_page%20==%201)%20{
page_html%20=%20page_html%20+%20'<li%20class="disabled"><a%20href="JavaScript:void(0);">«</a></li>';
}%20else%20{
page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">«</a></li>';
}
}
for%20(var%20i%20=%20page_start;%20i%20<=%20page_end;%20i++)%20{
if%20(page_page%20==%20i)%20{
page_html%20=%20page_html%20+%20'<li%20class="active"><a%20href="JavaScript:void(0);">'%20+%20i%20+%20'</a></li>';
}%20else%20{
page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">'%20+%20i%20+%20'</a></li>';
}
}
if%20(page_end%20!==%200)%20{
if%20(page_page%20==%20page_end)%20{
page_html%20=%20page_html%20+%20'<li%20class="disabled"><a%20href="JavaScript:void(0);">»</a></li>';
}%20else%20{
page_html%20=%20page_html%20+%20'<li><a%20href="JavaScript:void(0);">»</a></li>';
}
}
page_html%20=%20page_html%20+%20'</ul></div></div>';
var%20mainData%20=%20$("#main%20#mainData");
mainData.html(table_html);
mainData.append(page_html);
admin_content_page(page_page,page_end);%20//挂接分页点击事件
}
//alert(json.data);
},
error:%20function(xhr,%20textStatus,%20errorThrown)%20{
//called%20when%20there%20is%20an%20error
}
});
}
/**
*%20挂机分页事件
*%20参数%20page_page%20当前分页
*%20参数%20page_end %20分页数量
*/
function%20admin_content_page(page_page,page_end)%20{
$("#mainPage%20a").click(function()%20{
var%20charStr%20=%20$(this).text();
var%20num%20=%20charStr;
if%20(charStr%20==%20"»")%20{
num%20=%20parseInt(page_page)%20+%201;
if%20(page_end%20<%20num)%20{
return;
}
}%20else%20if%20(charStr%20==%20"«")%20{
num%20=%20parseInt(page_page)%20-%201;
if%20(num%20<=%200)%20{
return;
}
}
admin_content(num);
});
}
function%20admin_content_del%20(id)%20{
alert(id);
}
function%20getLocalTime(nS)%20{
return%20new%20Date(parseInt(nS)%20*%201000).toLocaleString().replace(/:/d{1,2}$/,%20'%20');
}这是分页请求的服务端代码
[php] %20public%20function%20content()
{
%20//引入分页类
%20include%20"page.class.php";
%20//得到data表的数据数量
%20$rows%20=%20$this->db->count('select%20*%20from%20data');
%20//创建分页对象
%20$page%20=%20new%20Page($rows,%205,%20"");
%20$list=$this->db
%20->order('id%20DESC')
%20->table('data')
%20->limit($page->getLimit())
%20->select();
%20/*
%20echo%20"<pre>";
%20var_dump($list);
%20echo%20"</pre>";
%20*/
%20$json['state']='ok';
%20$json['start']=$page->getStart();
%20$json['end']=$page->getEnd();
%20$json['page']=$page->getPage();
%20$json['data']=$list;
%20echo%20json_encode($json);
%20//exit();
}
public%20function%20content()
{
//引入分页类
include%20"page.class.php";
//得到data表的数据数量
$rows%20=%20$this->db->count('select%20*%20from%20data');
//创建分页对象
$page%20=%20new%20Page($rows,%205,%20"");
$list=$this->db
%20->order('id%20DESC')
%20->table('data')
%20 %20->limit($page->getLimit())
%20 %20->select();
/*
echo%20"<pre>";
var_dump($list);
echo%20"</pre>";
*/
$json['state']='ok';
$json['start']=$page->getStart();
$json['end']=$page->getEnd();
$json['page']=$page->getPage();
$json['data']=$list;
echo%20json_encode($json);
//exit();
}
做这分页的时候由于是ajax,html代码生成都在客户端。经过我观察这分页类存在问题。实际上许多代码都没必要存在。有时间我去把他干掉。
附上代码%20page.class.php
[php] %20<?php
%20/**
%20file:%20page.class.php
%20完美分页类%20Page
%20@微凉%20QQ496928838
%20*/
%20class%20Page%20{
%20private%20$total; %20//数据表中总记录数
%20private%20$listRows; %20//每页显示行数
%20private%20$limit; %20//SQL语句使用limit从句,限制获取记录个数
%20private%20$uri; %20//自动获取url的请求地址
%20private%20$pageNum; %20//总页数
%20private%20$page; %20//当前页
%20private%20$config%20=%20array(
%20'head'%20=>%20"条记录",
%20'prev'%20=>%20"上一页",
%20'next'%20=>%20"下一页",
%20'first'=>%20"首页",
%20'last'%20=>%20"末页"
%20); %20//在分页信息中显示内容,可以自己通过set()方法设置
%20private%20$listNum%20=%2010; %20//默认分页列表显示的个数
%20/**
%20构造方法,可以设置分页类的属性
%20@param %20int%20$total %20计算分页的总记录数
%20@param %20int%20$listRows %20可选的,设置每页需要显示的记录数,默认为25条
%20@param %20mixed %20$query %20可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
%20@param %20bool %20$ord %20可选的,默认值为true,%20页面从第一页开始显示,false则为最后一页
%20*/
%20public%20function%20__construct($total,%20$listRows=25,%20$query="",%20$ord=true){
%20$this->total%20=%20$total;
%20$this->listRows%20=%20$listRows;
%20$this->uri%20=%20$this->getUri($query);
%20$this->pageNum%20=%20ceil($this->total%20/%20$this->listRows);
%20/*以下判断用来设置当前面*/
%20if(!empty($_GET["page"]))%20{
%20$page%20=%20$_GET["page"];
%20}else{
%20if($ord)
%20$page%20=%201;
%20else
%20$page%20=%20$this->pageNum;
%20}
%20if($total%20>%200)%20{
%20if(preg_match('//D/',%20$page)%20){
%20$this->page%20=%201;
%20}else{
%20$this->page%20=%20$page;
%20}
%20}else{
%20$this->page%20=%200;
%20}
%20$this->limit%20=%20"LIMIT%20".$this->getLimit();
%20}
%20/**
%20用于设置显示分页的信息,可以进行连贯操作
%20@param %20string %20$param %20是成员属性数组config的下标
%20@param %20string %20$value %20用于设置config下标对应的元素值
%20@return%20object %20返回本对象自己$this,%20用于连惯操作
%20*/
%20function%20set($param,%20$value){
%20if(array_key_exists($param,%20$this->config)){
%20$this->config[$param]%20=%20$value;
%20}
%20return%20$this;
%20}
%20/*%20不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值%20*/
%20function%20__get($args){
%20if($args%20==%20"limit"%20||%20$args%20==%20"page")
%20return%20$this->$args;
%20else
%20return%20null;
%20}
%20/**
%20按指定的格式输出分页
%20@param %20int%200-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
%20@return%20string %20分页信息内容
%20*/
%20function%20fpage(){
%20$arr%20=%20func_get_args();
%20$html[0]%20=%20"%20共<b>%20{$this->total}%20</b>{$this->config["head"]}%20";
%20$html[1]%20=%20"%20本页%20<b>".$this->disnum()."</b>%20条%20";
%20$html[2]%20=%20"%20本页从%20<b>{$this->start()}-{$this->end()}</b>%20条%20";
%20$html[3]%20=%20"%20<b>{$this->page}/{$this->pageNum}</b>页%20";
%20$html[4]%20=%20$this->firstprev();
%20$html[5]%20=%20$this->pageList();
%20$html[6]%20=%20$this->nextlast();
%20$html[7]%20=%20$this->goPage();
%20$fpage%20=%20'<div%20style="font:12px%20/'/5B8B/4F53/',san-serif;">';
%20if(count($arr)%20<%201)
%20$arr%20=%20array(0,%201,2,3,4,5,6,7);
%20for($i%20=%200;%20$i%20<%20count($arr);%20$i++)
%20$fpage%20.=%20$html[$arr[$i]];
%20$fpage%20.=%20'</div>';
%20return%20$fpage;
%20}
%20/*%20格式为%201,5,*/
%20function%20getLimit(){
%20if($this->page%20>%200)
%20return%20($this->page-1)*$this->listRows.",{$this->listRows}";
%20else
%20return%200;
%20}
%20//当前的页面
%20function%20getPage(){
%20return%20$this->page;
%20}
%20//分页的开始
%20function%20getStart(){
%20$num1=$this->page-4;
%20return%20$num1>0?$num1:1;
%20}
%20//分页的结束
%20function%20getEnd(){
%20$num1=$this->pageNum;
%20$num2=$this->page+5;
%20return%20$num1<$num2?$num1:$num2;
%20}
%20/*%20在对象内部使用的私有方法,用于自动获取访问的当前URL%20*/
%20private%20function%20getUri($query){
%20$request_uri%20=%20$_SERVER["REQUEST_URI"];
%20$url%20=%20strstr($request_uri,'?')%20?%20$request_uri%20: %20$request_uri.'?';
%20if(is_array($query))
%20$url%20.=%20http_build_query($query);
%20else%20if($query%20!=%20"")
%20$url%20.=%20"&".trim($query,%20"?&");
%20$arr%20=%20parse_url($url);
%20if(isset($arr["query"])){
%20parse_str($arr["query"],%20$arrs);
%20unset($arrs["page"]);
%20$url%20=%20$arr["path"].'?'.http_build_query($arrs);
%20}
%20if(strstr($url,%20'?'))%20{
%20if(substr($url,%20-1)!='?')
%20$url%20=%20$url.'&';
%20}else{
%20$url%20=%20$url.'?';
%20}
%20return%20$url;
%20}
%20/*%20在对象内部使用的私有方法,用于获取当前页开始的记录数%20*/
%20private%20function%20start(){
%20if($this->total%20==%200)
%20return%200;
%20else
%20return%20($this->page-1)%20*%20$this->listRows+1;
%20}
%20/*%20在对象内部使用的私有方法,用于获取当前页结束的记录数%20*/
%20private%20function%20end(){
%20return%20min($this->page%20*%20$this->listRows,%20$this->total);
%20}
%20/*%20在对象内部使用的私有方法,用于获取上一页和首页的操作信息%20*/
%20private%20function%20firstprev(){
%20if($this->page%20>%201)%20{
%20$str%20=%20"%20<a%20href='{$this->uri}page=1'>{$this->config["first"]}</a>%20";
%20$str%20.=%20"<a%20href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a>%20";
%20return%20$str;
%20}
%20}
%20/*%20在对象内部使用的私有方法,用于获取页数列表信息%20*/
%20private%20function%20pageList(){
%20$linkPage%20=%20"%20<b>";
%20$inum%20=%20floor($this->listNum/2);
%20/*当前页前面的列表%20*/
%20for($i%20=%20$inum;%20$i%20>=%201;%20$i--){
%20$page%20=%20$this->page-$i;
%20if($page%20>=%201)
%20$linkPage%20.=%20"<a%20href='{$this->uri}page={$page}'>{$page}</a>%20";
%20}
%20/*当前页的信息%20*/
%20if($this->pageNum%20>%201)
%20$linkPage%20.=%20"<span%20style='padding:1px%202px;background:#BBB;color:white'>{$this->page}</span>%20";
%20/*当前页后面的列表%20*/
%20for($i=1;%20$i%20<=%20$inum;%20$i++){
%20$page%20=%20$this->page+$i;
%20if($page%20<=%20$this->pageNum)
%20$linkPage%20.=%20"<a%20href='{$this->uri}page={$page}'>{$page}</a>%20";
%20else
%20break;
%20}
%20$linkPage%20.=%20'</b>';
%20return%20$linkPage;
%20}
%20/*%20在对象内部使用的私有方法,获取下一页和尾页的操作信息%20*/
%20private%20function%20nextlast(){
%20if($this->page%20!=%20$this->pageNum)%20{
%20$str%20=%20"%20<a%20href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a>%20";
%20$str%20.=%20"%20<a%20href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a>%20";
%20return%20$str;
%20}
%20}
%20/*%20在对象内部使用的私有方法,用于显示和处理表单跳转页面%20*/
%20private%20function%20goPage(){
%20if($this->pageNum%20>%201)%20{
%20return%20'%20<input%20style="width:20px;height:17px%20!important;height:18px;border:1px%20solid%20#CCCCCC;"%20type="text"%20onkeydown="javascript:if(event.keyCode==13){var%20page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=/''.$this->uri.'page=/'+page+/'/'}"%20value="'.$this->page.'"><input%20style="cursor:pointer;width:25px;height:18px;border:1px%20solid%20#CCCCCC;"%20type="button"%20value="GO"%20onclick="javascript:var%20page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=/''.$this->uri.'page=/'+page+/'/'">%20';
%20}
%20}
%20/*%20在对象内部使用的私有方法,用于获取本页显示的记录条数%20*/
%20private%20function%20disnum(){
%20if($this->total%20>%200){
%20return%20$this->end()-$this->start()+1;
%20}else{
%20return%200;
%20}
%20}
%20}
<?php
/**
file:%20page.class.php
完美分页类%20Page
@微凉%20QQ496928838
*/
class%20Page%20{
private%20$total; %20 %20 //数据表中总记录数
private%20$listRows;%20 //每页显示行数
private%20$limit; %20 %20 //SQL语句使用limit从句,限制获取记录个数
private%20$uri; %20 %20 //自动获取url的请求地址
private%20$pageNum;%20 %20 //总页数
private%20$page; //当前页
private%20$config%20=%20array(
'head'%20=>%20"条记录",
'prev'%20=>%20"上一页",
'next'%20=>%20"下一页",
'first'=>%20"首页",
'last'%20=>%20"末页"
);%20 //在分页信息中显示内容,可以自己通过set()方法设置
private%20$listNum%20=%2010;%20 //默认分页列表显示的个数
/**
构造方法,可以设置分页类的属性
@param int $total 计算分页的总记录数
@param int $listRows 可选的,设置每页需要显示的记录数,默认为25条
@param mixed $query 可选的,为向目标页面传递参数,可以是数组,也可以是查询字符串格式
@param%20 bool $ord 可选的,默认值为true,%20页面从第一页开始显示,false则为最后一页
%20*/
public%20function%20__construct($total,%20$listRows=25,%20$query="",%20$ord=true){
$this->total%20=%20$total;
$this->listRows%20=%20$listRows;
$this->uri%20=%20$this->getUri($query);
$this->pageNum%20=%20ceil($this->total%20/%20$this->listRows);
/*以下判断用来设置当前面*/
if(!empty($_GET["page"]))%20{
$page%20=%20$_GET["page"];
}else{
if($ord)
$page%20=%201;
else
$page%20=%20$this->pageNum;
}
if($total%20>%200)%20{
if(preg_match('//D/',%20$page)%20){
$this->page%20=%201;
}else{
$this->page%20=%20$page;
}
}else{
$this->page%20=%200;
}
$this->limit%20=%20"LIMIT%20".$this->getLimit();
}
/**
用于设置显示分页的信息,可以进行连贯操作
@param string $param 是成员属性数组config的下标
@param string $value 用于设置config下标对应的元素值
@return object 返回本对象自己$this,%20用于连惯操作
%20*/
function%20set($param,%20$value){
if(array_key_exists($param,%20$this->config)){
$this->config[$param]%20=%20$value;
}
return%20$this;
}
/*%20不是直接去调用,通过该方法,可以使用在对象外部直接获取私有成员属性limit和page的值%20*/
function%20__get($args){
if($args%20==%20"limit"%20||%20$args%20==%20"page")
return%20$this->$args;
else
return%20null;
}
/**
按指定的格式输出分页
@param int 0-7的数字分别作为参数,用于自定义输出分页结构和调整结构的顺序,默认输出全部结构
@return string 分页信息内容
%20*/
function%20fpage(){
$arr%20=%20func_get_args();
$html[0]%20=%20"%20共<b>%20{$this->total}%20</b>{$this->config["head"]}%20";
$html[1]%20=%20"%20本页%20<b>".$this->disnum()."</b>%20条%20";
$html[2]%20=%20"%20本页从%20<b>{$this->start()}-{$this->end()}</b>%20条%20";
$html[3]%20=%20"%20<b>{$this->page}/{$this->pageNum}</b>页%20";
$html[4]%20=%20$this->firstprev();
$html[5]%20=%20$this->pageList();
$html[6]%20=%20$this->nextlast();
$html[7]%20=%20$this->goPage();
$fpage%20=%20'<div%20style="font:12px%20/'/5B8B/4F53/',san-serif;">';
if(count($arr)%20<%201)
$arr%20=%20array(0,%201,2,3,4,5,6,7);
for($i%20=%200;%20$i%20<%20count($arr);%20$i++)
$fpage%20.=%20$html[$arr[$i]];
$fpage%20.=%20'</div>';
return%20$fpage;
}
/*%20格式为%201,5,*/
function%20getLimit(){
if($this->page%20>%200)
return%20($this->page-1)*$this->listRows.",{$this->listRows}";
else
return%200;
}
//当前的页面
function%20getPage(){
return%20$this->page;
}
//分页的开始
function%20getStart(){
$num1=$this->page-4;
return%20$num1>0?$num1:1;
}
//分页的结束
function%20getEnd(){
$num1=$this->pageNum;
$num2=$this->page+5;
return%20$num1<$num2?$num1:$num2;
}
/*%20在对象内部使用的私有方法,用于自动获取访问的当前URL%20*/
private%20function%20getUri($query){
$request_uri%20=%20$_SERVER["REQUEST_URI"];
$url%20=%20strstr($request_uri,'?')%20?%20$request_uri%20: %20$request_uri.'?';
if(is_array($query))
$url%20.=%20http_build_query($query);
else%20if($query%20!=%20"")
$url%20.=%20"&".trim($query,%20"?&");
$arr%20=%20parse_url($url);
if(isset($arr["query"])){
parse_str($arr["query"],%20$arrs);
unset($arrs["page"]);
$url%20=%20$arr["path"].'?'.http_build_query($arrs);
}
if(strstr($url,%20'?'))%20{
if(substr($url,%20-1)!='?')
$url%20=%20$url.'&';
}else{
$url%20=%20$url.'?';
}
return%20$url;
}
/*%20在对象内部使用的私有方法,用于获取当前页开始的记录数%20*/
private%20function%20start(){
if($this->total%20==%200)
return%200;
else
return%20($this->page-1)%20*%20$this->listRows+1;
}
/*%20在对象内部使用的私有方法,用于获取当前页结束的记录数%20*/
private%20function%20end(){
return%20min($this->page%20*%20$this->listRows,%20$this->total);
}
/*%20在对象内部使用的私有方法,用于获取上一页和首页的操作信息%20*/
private%20function%20firstprev(){
if($this->page%20>%201)%20{
$str%20=%20"%20<a%20href='{$this->uri}page=1'>{$this->config["first"]}</a>%20";
$str%20.=%20"<a%20href='{$this->uri}page=".($this->page-1)."'>{$this->config["prev"]}</a>%20";
return%20$str;
}
}
/*%20在对象内部使用的私有方法,用于获取页数列表信息%20*/
private%20function%20pageList(){
$linkPage%20=%20"%20<b>";
$inum%20=%20floor($this->listNum/2);
/*当前页前面的列表%20*/
for($i%20=%20$inum;%20$i%20>=%201;%20$i--){
$page%20=%20$this->page-$i;
if($page%20>=%201)
$linkPage%20.=%20"<a%20href='{$this->uri}page={$page}'>{$page}</a>%20";
}
/*当前页的信息%20*/
if($this->pageNum%20>%201)
$linkPage%20.=%20"<span%20style='padding:1px%202px;background:#BBB;color:white'>{$this->page}</span>%20";
/*当前页后面的列表%20*/
for($i=1;%20$i%20<=%20$inum;%20$i++){
$page%20=%20$this->page+$i;
if($page%20<=%20$this->pageNum)
$linkPage%20.=%20"<a%20href='{$this->uri}page={$page}'>{$page}</a>%20";
else
break;
}
$linkPage%20.=%20'</b>';
return%20$linkPage;
}
/*%20在对象内部使用的私有方法,获取下一页和尾页的操作信息%20*/
private%20function%20nextlast(){
if($this->page%20!=%20$this->pageNum)%20{
$str%20=%20"%20<a%20href='{$this->uri}page=".($this->page+1)."'>{$this->config["next"]}</a>%20";
$str%20.=%20"%20<a%20href='{$this->uri}page=".($this->pageNum)."'>{$this->config["last"]}</a>%20";
return%20$str;
}
}
/*%20在对象内部使用的私有方法,用于显示和处理表单跳转页面%20*/
private%20function%20goPage(){
%20 if($this->pageNum%20>%201)%20{
return%20'%20<input%20style="width:20px;height:17px%20!important;height:18px;border:1px%20solid%20#CCCCCC;"%20type="text"%20onkeydown="javascript:if(event.keyCode==13){var%20page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=/''.$this->uri.'page=/'+page+/'/'}"%20value="'.$this->page.'"><input%20style="cursor:pointer;width:25px;height:18px;border:1px%20solid%20#CCCCCC;"%20type="button"%20value="GO"%20onclick="javascript:var%20page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=/''.$this->uri.'page=/'+page+/'/'">%20';
}
}
/*%20在对象内部使用的私有方法,用于获取本页显示的记录条数%20*/
private%20function%20disnum(){
if($this->total%20>%200){
return%20$this->end()-$this->start()+1;
}else{
return%200;
}
}
}
1
CI框架连接数据库配置操作以及多数据库操作
09-05
2
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
05-17
3
C语言关键字及其解释介绍 C语言32个关键字详解
04-05
4
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
04-26
5
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
09-05
6
将视频设置为Android手机开机动画的教程
12-11
7
PHP中的(++i)前缀自增 和 (i++)后缀自增
09-05
8
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
04-12
常用dos命令及语法
2014-09-27
PHP中include和require区别之我见
2014-09-05
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
2017-05-03
php递归返回值的问题
2014-09-05
单片机编程好学吗?单片机初学者怎样看懂代码
2022-03-21
PHP 教程之如何使用BLOB存取图片信息实例
2014-09-05
学ug编程如何快速入门?
2022-03-17
PHP数组函数array
2014-09-05
学习使用C语言/C++编程的7个步骤!超赞~
2022-03-20
零基础的初学者怎样学习java,或者应该先学什么?
2022-03-21
收割者剑客传奇免谷歌汉化版下载v2.0.1 安卓版
其它手游 40.19MB
下载
reaper收割者破解版下载v2.0.1 安卓完美版
其它手游 40.19MB
下载
reaper汉化版下载v2.0.1 安卓中文版
其它手游 40.19MB
下载
死神苍白剑士的传说中文版(Reaper)下载v2.0.1 安卓版
其它手游 40.19MB
下载
宝宝巴士迷宫小镇下载v9.89.99.01 官方安卓版
其它手游 113.4MB
下载
宝宝迷宫大作战游戏下载v9.89.99.01 安卓版
其它手游 113.4MB
下载
宝宝巴士干净的妙妙游戏下载v9.89.99.00 安卓版
其它手游 76.43MB
下载
妙妙爱干净宝宝巴士下载v9.89.99.00 安卓版
其它手游 76.43MB
下载翻炒厨师游戏下载v2.1.3 安卓版
下载
维塔战士游戏最新版下载v976 安卓版
下载
泡泡小镇城堡游戏下载v1.1.5 安卓完整版
下载
3d蚊子模拟器游戏最新版下载v2023.08.22 安卓版
下载
超级机器人英雄游戏下载v1.1.3 安卓版
下载
robot super游戏下载v1.1.3 安卓版
下载
zombie tsunami游戏下载v4.6.8 安卓版
下载
2026僵尸尖叫正版下载v4.6.8 安卓官方版
下载