微笑de迪妮莎
2015-02-12 14:24
<?php
/************
*
* subPage.class.php
* 分页类
*
*************/
class SubPage{
private $sizeInPage;//每页显示多少条记录
private $totalRecord;//总共多少条记录
private $totalPage;//总共多少页
private $currentPage;//当前页
private $startIndex;//开始索引
private $offset;//偏移数
private $firstPage;//首页
private $endPage;//尾页
private $next;//下一页
private $last;//上一页
private $subPage_arr;//分页数组
private $subPage_count;//分页数组显示的个数
private $resultSet;//结果集
/*
* @function 构造方法
* @param $size_in_page每页显示记录数,$current_page当前页,$toatal_record总记录数,$subPage_count分页列数组显示的个数
* @return
*/
public function __construct($size_in_page,$current_page,$total_record,$subPage_count){
//$this->initPageArr($page_count);
$this->init($size_in_page,$current_page,$total_record,$subPage_count);
$this->setTotalPage();
$this->setStartIndex();
$this->setOffset();
if($this->is_SubPage()){
//有分页的情况
$this->setSubPageArr();
}
else{
//没有分页的情况
$this->subPage_arr=array();
}
}
/*
* @function 初始化对象属性
* @param $size_in_page每页显示记录数,$current_page当前页,$toatal_record总记录数
* @return none
*/
public function init($size_in_page,$current_page,$total_record,$subPage_count){
$this->sizeInPage=$size_in_page;
$this->currentPage=$current_page;
$this->totalRecord=$total_record;
$this->subPage_count=$subPage_count;
}
/*
* @function 设定总页数
*/
public function setTotalPage(){
$this->totalPage=ceil($this->totalRecord/$this->sizeInPage);
}
/*
* @function 设定开始索引
*/
public function setStartIndex(){
$this->startIndex=($this->currentPage-1)*$this->sizeInPage;
}
/*
* @function 设定偏移量
*/
public function setOffset(){
$this->offset=$this->sizeInPage;
}
/*
* @function 设定首页的页数
*/
public function setFirstPage(){
$this->firstPage=1;
}
/*
* @function 设定尾页的页数
*/
public function setEndPage(){
$this->endPage=$this->totalPage;
}
/*
* @function 设定下一页的页数
*/
public function setNext(){
$tmp_next=$this->currentPage+1;
if($tmp_next>$this->totalPage){
$tmp_next=$this->totalPage;
}
$this->next=$tmp_next;
}
/*
* @function 设定上一页的页数
*/
public function setLast(){
$tmp_last=$this->currentPage-1;
if($tmp_last<1){
$tmp_last=1;
}
$this->last=$tmp_last;
}
/*
* @function 判断是否有分页
* @return boolean 返回true表示有分页,false表示没有
*/
public function is_SubPage(){
if($this->totalPage>1){
return true;
}
else{
return false;
}
}
/*
* @function 组装分页数组
* @param $start开始的页码数,$count几个页码数
*/
public function initSubPageArr($start,$count){
$arr=array();
for($i=0;$i<$count;$i++,$start++){
$arr[$i]=$start;
}
$this->subPage_arr=$arr;
}
/*
* @function 检测数值是否奇数
* @param $num被检测数
* @return boolean 返回true表示是奇数,返回false表示是偶数
*/
public function is_odd($num){
if($num%2==0){
return false;
}
else{
return true;
}
}
/*
* @function 设定分页数组
* @param none
* @return none
*/
public function setSubPageArr(){
if($this->totalPage<=$this->subPage_count){
//只有一轮数组
$start=1;
$count=$this->totalPage-$start+1;
$this->initSubPageArr($start,$count);
}
else{
if($this->currentPage<ceil($this->subPage_count/2)){
//第一轮数组 当前页小于均分数的情况
$start=1;
$count=$this->subPage_count-$start+1;
$this->initSubPageArr($start,$count);
}
else if($this->currentPage<=$this->totalPage && $this->currentPage>($this->totalPage-ceil($this->subPage_count/2))){
//最后一轮数组 当前页大于总页数-均分数
$start=$this->totalPage-$this->subPage_count+1;
$count=$this->subPage_count;
$this->initSubPageArr($start,$count);
}
else{
//其余情况
if(($this->currentPage%$this->subPage_count)>ceil($this->subPage_count/2)){
//点到数组后半部分
$rs=$this->is_odd($this->subPage_count);
if($rs===true){
//显示数是奇数
$start=$this->currentPage-floor($this->subPage_count/2);
$count=$this->subPage_count;
$this->initSubPageArr($start,$count);
}
else{
//显示数是偶数
$start=$this->currentPage-(($this->subPage_count/2)-1);//因为当前页数也需要占1个位置
$count=$this->subPage_count;
$this->initSubPageArr($start,$count);
}
}
else{
//点到数组前半部分
$rs=$this->is_odd($this->subPage_count);
if($rs===true){
//显示数是奇数
$start=$this->currentPage-floor($this->subPage_count/2);
$count=$this->subPage_count;
$this->initSubPageArr($start,$count);
}
else{
//显示数是偶数
$start=$this->currentPage-(($this->subPage_count/2)-1);//因为当前页数也需要占1个位置
$count=$this->subPage_count;
$this->initSubPageArr($start,$count);
}
}
}
}
}
/*
* @function 查看分页数的效果
* @param none
* @return string 分页码效果
*/
public function showSubPageArr(){
$arr=$this->subPage_arr;
$str="";
foreach($arr as $key=>$value){
$str.=$value."_";
}
$str=rtrim($str,"_");
echo $str;
}
}
$subPage=new SubPage(2,7,19,6);
$subPage->showSubPageArr();
?>刚写的一个分页类,还未进行代码精简。各位大大们看看,哪里写的不对的,希望各位大大,前辈指出。谢谢!本人菜鸟一个虚心求教。
还没有人回答问题,可以看看其他问题
PHP进阶篇
181959 学习 · 2668 问题
相似问题