+ -
当前位置:首页 → 问答吧 → 一个好用的分页类【最后更新: 2009-02-14】(我在discuz6.1首页背景音乐插件中用到)

一个好用的分页类【最后更新: 2009-02-14】(我在discuz6.1首页背景音乐插件中用到)

时间:2008-12-03

来源:互联网

前段时间自己做了个论坛,在dz的官网找了很久音乐插件,没找到合适的,于是自己写了个discuz6.1首页背景音乐插件。
插件发布到了dz官网:
在discuz官网的链接是:http://www.discuz.net/thread-1131400-1-1.html

其中用到一个分页类,是我由网上一个分页类修改而来的,下面给出代码,有不对之处还请指正:
2009年02月14日更新,最新版的代码请见第10楼.


[php]<?php
#*********************************************************
#文件名称: page.class.php
#功能描述: 修改而来的分页类
#程序制作:荒野无灯(修改)
#联系qq  :[email=admin#netgeek.cn]admin#netgeek.cn[/email]
#联系邮箱:[email=admin#netgeek.cn]admin#netgeek.cn[/email]
#官方网站: http://netgeek.cn/memory/php/dis ... bg-music-plugin.asp
#copyright (c) 2008 netgeek.cn all rights reserved.
#最后更新:     2008-12-04
#*********************************************************        
class page
{
/**
* config ,public
*/
var $m_var="page";//page标签,用来控制url页。比如说xxx.php?page=2中的page
var $m_snext='>';//下一页
var $m_spre='<';//上一页
var $m_sfirst='首页';//首页
var $m_slast='尾页';//尾页
var $m_sprebar='<<';//上一分页条
var $m_snextbar='>>';//下一分页条
var $m_sleft='[';
var $m_sright=']';


/**
* private
*
*/
var $m_barnum=10;//(默认每个分页条显示10个页码数)。
var $m_totalpage=0;//总页数
var $m_current=1;//当前页码
var $m_url="";//url地址头
var $m_offset=0;
//var $m_perpage=10;//默认每页显示 记录数 为10

/**
* constructor构造函数
*
* @param array $array['total']//总记录数,$array['perpage'],$array['current'],$array['url'],$array['barnum']...$arr['var']
*/
function page($arr)
{
if(is_array($arr)){
     if(!array_key_exists('total',$arr))$this->error(__FUNCTION__,'need a param of total');
     $total=intval($arr['total']);
     $perpage=(array_key_exists('perpage',$arr))?intval($arr['perpage']):10;
     $current=(array_key_exists('current',$arr))?intval($arr['current']):'';
     $url=(array_key_exists('url',$arr))?$arr['url']:'';
}else
{
     $total=($arr<0)?0:intval($arr);
     $perpage=10;
     $current='';
     $url='';
}
if((!is_int($total))||($total<0))
$this->error(__FUNCTION__,$total.' is not a positive integer!');
if((!is_int($perpage))||($perpage<=0))
$this->error(__FUNCTION__,$perpage.' is not a positive integer!');
if(!empty($arr['var']))
$this->m_var=$arr['var'];//设置pagename
$this->_set_current($current);//设置当前页$current
$this->_set_url($url);//设置链接地址
$this->m_totalpage=ceil($total/$perpage);//总页数
$this->m_offset=($this->m_current-1)*$perpage;
$this->m_barnum=($arr['barnum']>5)?$arr['barnum']:10;
$this->m_perpage=$perpage;//20081102

}


function next_page($style='')
{
if($this->m_current<$this->m_totalpage){
   return $this->_get_link($this->_get_url($this->m_current+1),$this->m_snext,$style);
}
return '<span class="'.$style.'">'.$this->m_snext.'</span>';
}

/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
function pre_page($style='')
{
if($this->m_current>1){
   return $this->_get_link($this->_get_url($this->m_current-1),$this->m_spre,$style);
}
return '<span class="'.$style.'">'.$this->pre_page.'</span>';
}

/**
* 获取显示“首页”的代码
*
* @return string
*/
function first_page($style='')
{
if($this->m_current==1){
      return '<span class="'.$style.'">'.$this->m_sfirst.'</span>';
}
return $this->_get_link($this->_get_url(1),$this->m_sfirst,$style);
}

/**
* 获取显示“尾页”的代码
*
* @return string
*/
function last_page($style='')
{
if($this->m_current==$this->m_totalpage){
      return '<span class="'.$style.'">'.$this->m_slast.'</span>';
}
return $this->_get_link($this->_get_url($this->m_totalpage),$this->m_slast,$style);
}

function nowbar($style='',$current_style='')
{
$plus=ceil($this->m_barnum/2);
if($this->m_barnum-$plus+$this->m_current>$this->m_totalpage)
$plus=($this->m_barnum-$this->m_totalpage+$this->m_current);
$begin=$this->m_current-$plus+1;
$begin=($begin>=1)?$begin:1;
$return='';
for($i=$begin;$i<$begin+$this->m_barnum;$i++)
{
   if($i<=$this->m_totalpage){
    if($i!=$this->m_current)
        $return.=$this->_add_bracket($this->_get_link($this->_get_url($i),$i,$style));
    else
        $return.=$this->_add_bracket('<span class="'.$current_style.'"><font color=red>'.$i.'</font></span>');
   }else
   {
    break;
   }
   $return.="\n";
}
unset($begin);
return $return;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select()
{
   $return="<script language=\"javascript\" type=\"text/javascript\">
   function changeurl(page_num)
   {
document.location.href=\"?$this->m_var=\"+page_num;
}
</script>
<select name=\"page_select\" onChange=changeurl(this.options[this.selectedIndex].value) id=\"page_select\">";
for($i=1;$i<=$this->m_totalpage;$i++)
{
   if($i==$this->m_current){
    $return.='<option value="'.$i.'" selected>'.$i.'</option>';
   }else
   {
    $return.='<option value="'.$i.'">'.$i.'</option>';
   }
}
unset($i);
$return.='</select>';
return $return;
}

/**
* 获取mysql 语句中limit需要的值
*
* @return string
*/
function offset()
{
return $this->m_offset;
}

/**
* 控制分页显示风格(你可以增加相应的风格)
*
* @param int $mode
* @return string
*/
function show($mode=1)
{
switch ($mode)
{
   case '1':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->first_page().'  '.$this->pre_page().$this->nowbar().$this->next_page().'  '.$this->last_page().$this->select();
    break;
   case '2':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().'[第'.$this->m_current.' 页]'.$this->next_page().$this->last_page().'第'.$this->select().' 页';
    break;
   case '3':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
    break;
   case '4':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->pre_page().$this->nowbar().$this->next_page();
    break;
   case '5':
    return $this->m_sprebar.$this->pre_page().$this->nowbar().$this->next_page().$this->m_snextbar;
    break;
}

}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url)){
      //手动设置
   $this->m_url=$url.((stristr($url,'?'))?'&':'?').$this->m_var."=";
}else //自动获取
{
     
   if(empty($_SERVER['QUERY_STRING'])){
       //不存在QUERY_STRING时
    $this->m_url=$_SERVER['REQUEST_URI']."?".$this->m_var."=";
   }else
   {
       //
    if(stristr($_SERVER['QUERY_STRING'],$this->m_var.'=')){
        //地址存在页面参数
     $this->m_url=str_replace($this->m_var.'='.$this->m_current,'',$_SERVER['REQUEST_URI']);
     $last=$this->m_url[strlen($this->m_url)-1];
     if($last=='?'||$last=='&'){
         $this->m_url.=$this->m_var."=";
     }else{
         $this->m_url.='&'.$this->m_var."=";
     }
    }else
    {
        $this->m_url=$_SERVER['REQUEST_URI'].'&'.$this->m_var.'=';
    // $this->m_url='&'.$this->m_var.'=';
    }//end if   
   }//end if
}//end if
}

/**
* 设置当前页面
*
*/
function _set_current($nowindex)
{
if(empty($nowindex)){
   //系统获取
  
   if(isset($_GET[$this->m_var])){
    $this->m_current=intval($_GET[$this->m_var]);
   }
}else{
      //手动设置
   $this->m_current=intval($nowindex);
}
}

/**
* 为指定的页面返回地址值
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno=1)
{
return $this->m_url.$pageno;
}

/**
* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
*
* @param String $str
* @return string $url
*/
function _add_bracket($str)
{
return $this->m_sleft.$str.$this->m_sright;
}

/**
   * 获取链接地址
*/
function _get_link($url,$text,$style='')
{
$style=(empty($style))?'':'class="'.$style.'"';

   return '<a '.$style.' href="'.$url.'">'.$text.'</a>';

}
/**
   * 出错处理方式
*/
function error($function,$errormsg)
{
     die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);
}
}
?>[/php]

我用的一个demo:
[php]$total=$db->query("select * from music_info where uid='$discuz_uid'");  
$total=$db->num_rows($total);

$page=new page(array('total'=>$total,'perpage'=>'10','var'=>'pid','barnum'=>'8'));

$query=$db->query("select * from music_info order by mid desc limit $page->m_offset,$page->m_perpage");
/////////////new added //page
$j=0;
while($m=$db->fetch_array($query))
{        $m['url']=urldecode($m['url']);
        echo "<tr><td width=10%><a target=_BLANK href='space.php?uid={$m['uid']}'>{$m['uid']}</a></td><td width=10%><input type=\"text\" id=\"song_name_$j\" value=\"{$m['song_name']}\" ></td><td width=10%><input type=\"text\" id=\"singer_$j\"  value=\"{$m['singer']}\" ></td><td width=40%><input type=\"text\" id=\"url_$j\" size=70 value=\"{$m['url']}\"></td><td width=30%><input type=checkbox name='del[]' value=\"{$m['mid']}\"><input type=\"hidden\" id=\"edit_mid_$j\"  value=\"{$m['mid']}\" >  <a href=\"javascript:process($j);\">改</a>  <a target=_BLANK href='./my_music_box.php?mid={$m['mid']}'>Play</a></td>";
        $j+=1;
}

echo "共有歌曲{$total}首.    总共{$page->m_totalpage}页    ";
echo $page->show();
echo '<br/>';
[/php]

作者: sejie10011   发布时间: 2008-12-03

支持

作者: fireseno   发布时间: 2008-12-03

这个分页有点问题,
哪位高人,给完善一下!!!

这个分页的问题是

再url带参数是,后面的直接跳到某页没有带上参数,

上一页下一页都带上了,

作者: 0hudu   发布时间: 2008-12-05

原帖由 hiihii 于 2009-1-21 14:09 发表
这个分页有点问题,
哪位高人,给完善一下!!!

这个分页的问题是

再url带参数是,后面的直接跳到某页没有带上参数,

上一页下一页都带上了,
嗯 ,这是个问题。我当时只简单地在那个插件中测试了下,没有在有多个参数的页面测试。多参数时点击链接是正确的,但那个下拉框是跳转到只有一个参数的url 。
多谢指出错误!



原因在于select 这个函数出了点问题,下面我给出解决办法:
修改后的select 函数
[php]/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select()
{
   $return="<script language=\"javascript\" type=\"text/javascript\">
   function changeurl(page_args)
   {
document.location.href=page_args;
}
</script>
<select name=\"page_select\" onChange=changeurl(this.options[this.selectedIndex].value) id=\"page_select\">";
for($i=1;$i<=$this->m_totalpage;$i++)
{
   if($i==$this->m_current){
    $return.='<option value="'.$this->_get_url($i).'" selected>'.$i.'</option>';
   }else
   {
    $return.='<option value="'.$this->_get_url($i).'">'.$i.'</option>';
   }
}
unset($i);
$return.='</select>';
return $return;
}
[/php]

修改后的_set_url函数
[php]/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url))
{
      //手动设置
   $this->m_url=$url.((stristr($url,'?'))?'&':'?').$this->m_var."=";
}else //自动获取
{
     
   if(empty($_SERVER['QUERY_STRING']))
   {
       //不存在QUERY_STRING时
    $this->m_url=$_SERVER['REQUEST_URI']."?".$this->m_var."=";
   }else
   {
       //
    if(stristr($_SERVER['QUERY_STRING'],$this->m_var.'='))
   {
        //地址存在页面参数
     $this->m_url=str_replace($this->m_var.'='.$this->m_current,'',$_SERVER['REQUEST_URI']);
     $last=$this->m_url[strlen($this->m_url)-1];
     $this->m_url.=($last=='?'||$last=='&')?$this->m_var."=":'&'.$this->m_var."=";
     
   }else
    {
        $this->m_url=$_SERVER['REQUEST_URI'].'&'.$this->m_var.'=';
    // $this->m_url='&'.$this->m_var.'=';
    }//end if   
  }//end if
  $this->m_url=eregi("\?&",$this->m_url)?str_replace('?&','?',$this->m_url):$this->m_url;

}//end if
}
[/php]
更新后完整的代码见下面【7楼】

作者: hiihii   发布时间: 2009-01-21

支持

作者: sejie10011   发布时间: 2009-02-10

[php]<?php
#*********************************************************
#文件名称: page.class.php
#功能描述: 修改而来的分页类
#程序制作:荒野无灯(修改)
联系网址:http://netgeek.cn/contact.html
#联系qq  :admin#netgeek.cn
#联系邮箱:admin#netgeek.cn
#官方网站: http://netgeek.cn/memory/php/dis ... bg-music-plugin.asp
#copyright (c) 2008 netgeek.cn all rights reserved.
#最后更新:     2009-02-11
#*********************************************************        
class page
{
/**
* config ,public
*/
var $m_var="page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page
var $m_snext='>';//下一页
var $m_spre='<';//上一页
var $m_sfirst='首页';//首页
var $m_slast='尾页';//尾页
var $m_sprebar='<<';//上一分页条
var $m_snextbar='>>';//下一分页条
var $m_sleft='[';
var $m_sright=']';


/**
* private
*
*/
var $m_barnum=10;//(默认每个分页条显示10个页码数)。
var $m_totalpage=0;//总页数
var $m_current=1;//当前页码
var $m_url="";//url地址头
var $m_offset=0;
//var $m_perpage=10;//默认每页显示 记录数 为10

/**
* constructor构造函数
*
* @param array $array['total']//总记录数,$array['perpage'],$array['current'],$array['url'],$array['barnum']...$arr['var']
*/
function page($arr)
{
if(is_array($arr)){
     if(!array_key_exists('total',$arr))$this->error(__FUNCTION__,'need a param of total');
     $total=intval($arr['total']);
     $perpage=(array_key_exists('perpage',$arr))?intval($arr['perpage']):10;
     $current=(array_key_exists('current',$arr))?intval($arr['current']):'';
     $url=(array_key_exists('url',$arr))?$arr['url']:'';
}else
{
     $total=($arr<0)?0:intval($arr);
     $perpage=10;
     $current='';
     $url='';
}
if((!is_int($total))||($total<0))
$this->error(__FUNCTION__,$total.' is not a positive integer!');
if((!is_int($perpage))||($perpage<=0))
$this->error(__FUNCTION__,$perpage.' is not a positive integer!');
if(!empty($arr['var']))
$this->m_var=$arr['var'];//设置pagename
$this->_set_current($current);//设置当前页$current
$this->_set_url($url);//设置链接地址
$this->m_totalpage=ceil($total/$perpage);//总页数
$this->m_offset=($this->m_current-1)*$perpage;
$this->m_barnum=($arr['barnum']>5)?$arr['barnum']:10;
$this->m_perpage=$perpage;//20081102

}


function next_page($style='')
{
if($this->m_current<$this->m_totalpage){
   return $this->_get_link($this->_get_url($this->m_current+1),$this->m_snext,$style);
}
return '<span class="'.$style.'">'.$this->m_snext.'</span>';
}

/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
function pre_page($style='')
{
if($this->m_current>1){
   return $this->_get_link($this->_get_url($this->m_current-1),$this->m_spre,$style);
}
return '<span class="'.$style.'">'.$this->pre_page.'</span>';
}

/**
* 获取显示“首页”的代码
*
* @return string
*/
function first_page($style='')
{
if($this->m_current==1){
      return '<span class="'.$style.'">'.$this->m_sfirst.'</span>';
}
return $this->_get_link($this->_get_url(1),$this->m_sfirst,$style);
}

/**
* 获取显示“尾页”的代码
*
* @return string
*/
function last_page($style='')
{
if($this->m_current==$this->m_totalpage){
      return '<span class="'.$style.'">'.$this->m_slast.'</span>';
}
return $this->_get_link($this->_get_url($this->m_totalpage),$this->m_slast,$style);
}

function nowbar($style='',$current_style='')
{
$plus=ceil($this->m_barnum/2);
if($this->m_barnum-$plus+$this->m_current>$this->m_totalpage)
$plus=($this->m_barnum-$this->m_totalpage+$this->m_current);
$begin=$this->m_current-$plus+1;
$begin=($begin>=1)?$begin:1;
$return='';
for($i=$begin;$i<$begin+$this->m_barnum;$i++)
{
   if($i<=$this->m_totalpage){
    if($i!=$this->m_current)
        $return.=$this->_add_bracket($this->_get_link($this->_get_url($i),$i,$style));
    else
        $return.=$this->_add_bracket('<span class="'.$current_style.'"><font color=red>'.$i.'</font></span>');
   }else
   {
    break;
   }
   $return.="\n";
}
unset($begin);
return $return;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select()
{
   $return="<script language=\"javascript\" type=\"text/javascript\">
   function changeurl(page_args)
   {
document.location.href=page_args;
}
</script>
<select name=\"page_select\" onChange=changeurl(this.options[this.selectedIndex].value) id=\"page_select\">";
for($i=1;$i<=$this->m_totalpage;$i++)
{
   if($i==$this->m_current){
    $return.='<option value="'.$this->_get_url($i).'" selected>'.$i.'</option>';
   }else
   {
    $return.='<option value="'.$this->_get_url($i).'">'.$i.'</option>';
   }
}
unset($i);
$return.='</select>';
return $return;
}

/**
* 获取mysql 语句中limit需要的值
*
* @return string
*/
function offset()
{
return $this->m_offset;
}

/**
* 控制分页显示风格(你可以增加相应的风格)
*
* @param int $mode
* @return string
*/
function show($mode=1)
{
switch ($mode)
{
   case '1':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->first_page().'  '.$this->pre_page().$this->nowbar().$this->next_page().'  '.$this->last_page().$this->select();
    break;
   case '2':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().'[第'.$this->m_current.' 页]'.$this->next_page().$this->last_page().'第'.$this->select().' 页';
    break;
   case '3':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
    break;
   case '4':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->pre_page().$this->nowbar().$this->next_page();
    break;
   case '5':
    return $this->m_sprebar.$this->pre_page().$this->nowbar().$this->next_page().$this->m_snextbar;
    break;
}

}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url))
{
      //手动设置
   $this->m_url=$url.((stristr($url,'?'))?'&':'?').$this->m_var."=";
}else //自动获取
{
     
   if(empty($_SERVER['QUERY_STRING']))
   {
       //不存在QUERY_STRING时
    $this->m_url=$_SERVER['REQUEST_URI']."?".$this->m_var."=";
   }else
   {
       //
    if(stristr($_SERVER['QUERY_STRING'],$this->m_var.'='))
   {
        //地址存在页面参数
     $this->m_url=str_replace($this->m_var.'='.$this->m_current,'',$_SERVER['REQUEST_URI']);
     $last=$this->m_url[strlen($this->m_url)-1];
     $this->m_url.=($last=='?'||$last=='&')?$this->m_var."=":'&'.$this->m_var."=";
     
   }else
    {
        $this->m_url=$_SERVER['REQUEST_URI'].'&'.$this->m_var.'=';
    // $this->m_url='&'.$this->m_var.'=';
    }//end if   
  }//end if
  $this->m_url=eregi("\?&",$this->m_url)?str_replace('?&','?',$this->m_url):$this->m_url;

}//end if
}

/**
* 设置当前页面
*
*/
function _set_current($nowindex)
{
if(empty($nowindex)){
   //系统获取
  
   if(isset($_GET[$this->m_var])){
    $this->m_current=intval($_GET[$this->m_var]);
   }
}else{
      //手动设置
   $this->m_current=intval($nowindex);
}
}

/**
* 为指定的页面返回地址值
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno=1)
{
return $this->m_url.$pageno;
}

/**
* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
*
* @param String $str
* @return string $url
*/
function _add_bracket($str)
{
return $this->m_sleft.$str.$this->m_sright;
}

/**
   * 获取链接地址
*/
function _get_link($url,$text,$style='')
{
$style=(empty($style))?'':'class="'.$style.'"';

   return '<a '.$style.' href="'.$url.'">'.$text.'</a>';

}
/**
   * 出错处理方式
*/
function error($function,$errormsg)
{
     die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);
}
}
?>[/php]

作者: abcnic   发布时间: 2009-02-10

看看

作者: sejie10011   发布时间: 2009-02-11

1,解决“url带多个参数时,后面的下接菜单直接跳到某页没有带上参数附加参数“的问题。
2,解决页面总数为零时,显示问题。
3,修正了“首页”,”尾页“,“上一页”,”下一页“显示的问题。



[php]<?php
#*********************************************************
#文件名称: page.class.php
#功能描述: 修改而来的分页类
#程序制作:荒野无灯(修改)
#联系网址:http://netgeek.cn/contact.html
#联系qq  :admin#netgeek.cn
#联系邮箱:admin#netgeek.cn
#官方网站: http://netgeek.cn/memory/php/dis ... bg-music-plugin.asp
#copyright (c) 2008 netgeek.cn all rights reserved.
#最后更新:     2009-02-14
#*********************************************************        
class page
{
/**
* config ,public
*/
var $m_var="page";//page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page
var $m_snext='>';//下一页
var $m_spre='<';//上一页
var $m_sfirst='首页';//首页
var $m_slast='尾页';//尾页
var $m_sprebar='<<';//上一分页条
var $m_snextbar='>>';//下一分页条
var $m_sleft='[';
var $m_sright=']';


/**
* private
*
*/
var $m_barnum=10;//(默认每个分页条显示10个页码数)。
var $m_totalpage=0;//总页数
var $m_current=1;//当前页码
var $m_url="";//url地址头
var $m_offset=0;
//var $m_perpage=10;//默认每页显示 记录数 为10

/**
* constructor构造函数
*
* @param array $array['total']//总记录数,$array['perpage'],$array['current'],$array['url'],$array['barnum']...$arr['var']
*/
function page($arr)
{
if(is_array($arr)){
     if(!array_key_exists('total',$arr))$this->error(__FUNCTION__,'need a param of total');
     $total=intval($arr['total']);
     $perpage=(array_key_exists('perpage',$arr))?intval($arr['perpage']):10;
     $current=(array_key_exists('current',$arr))?intval($arr['current']):'';
     $url=(array_key_exists('url',$arr))?$arr['url']:'';
}else
{
     $total=($arr<0)?0:intval($arr);
     $perpage=10;
     $current='';
     $url='';
}
if((!is_int($total))||($total<0))
$this->error(__FUNCTION__,$total.' is not a positive integer!');
if((!is_int($perpage))||($perpage<=0))
$this->error(__FUNCTION__,$perpage.' is not a positive integer!');
if(!empty($arr['var']))
$this->m_var=$arr['var'];//设置pagename
$this->_set_current($current);//设置当前页$current
$this->_set_url($url);//设置链接地址
$this->m_totalpage=ceil($total/$perpage);//总页数
$this->m_offset=($this->m_current-1)*$perpage;
$this->m_barnum=($arr['barnum']>5)?$arr['barnum']:10;
$this->m_perpage=$perpage;//20081102

}


function next_page($style='')
{
if($this->m_current<$this->m_totalpage){
   return $this->_get_link($this->_get_url($this->m_current+1),$this->m_snext,$style);
}
return '<span class="'.$style.'">&nbsp;</span>';
}

/**
* 获取显示“上一页”的代码
*
* @param string $style
* @return string
*/
function pre_page($style='')
{
if($this->m_current>1){
   return $this->_get_link($this->_get_url($this->m_current-1),$this->m_spre,$style);
}
return '<span class="'.$style.'">&nbsp;</span>';
}

/**
* 获取显示“首页”的代码
*
* @return string
*/
function first_page($style='')
{
if($this->m_current==1){
      return '<span class="'.$style.'">&nbsp;</span>';
}
return $this->_get_link($this->_get_url(1),$this->m_sfirst,$style);
}

/**
* 获取显示“尾页”的代码
*
* @return string
*/
function last_page($style='')
{
if($this->m_current==$this->m_totalpage ||0==$this->m_totalpage){
      return '<span class="'.$style.'">&nbsp;</span>';
}
return $this->_get_link($this->_get_url($this->m_totalpage),$this->m_slast,$style);
}

function nowbar($style='',$current_style='')
{
$plus=ceil($this->m_barnum/2);
if($this->m_barnum-$plus+$this->m_current>$this->m_totalpage)
$plus=($this->m_barnum-$this->m_totalpage+$this->m_current);
$begin=$this->m_current-$plus+1;
$begin=($begin>=1)?$begin:1;
$return='';
for($i=$begin;$i<$begin+$this->m_barnum;$i++)
{
   if($i<=$this->m_totalpage){
    if($i!=$this->m_current)
        $return.=$this->_add_bracket($this->_get_link($this->_get_url($i),$i,$style));
    else
        $return.=$this->_add_bracket('<span class="'.$current_style.'"><font color=red>'.$i.'</font></span>');
   }else
   {
    break;
   }
   $return.="\n";
}
unset($begin);
return $return;
}
/**
* 获取显示跳转按钮的代码
*
* @return string
*/
function select()
{
        if(0==$this->m_totalpage)
                $return=' ';
        else
        {
   $return="<script language=\"javascript\" type=\"text/javascript\">
   function changeurl(page_args)
   {
document.location.href=page_args;
}
</script>
<select name=\"page_select\" onChange=changeurl(this.options[this.selectedIndex].value) id=\"page_select\">";
for($i=1;$i<=$this->m_totalpage;$i++)
{
   if($i==$this->m_current){
    $return.='<option value="'.$this->_get_url($i).'" selected>'.$i.'</option>';
   }else
   {
    $return.='<option value="'.$this->_get_url($i).'">'.$i.'</option>';
   }
}
unset($i);
$return.='</select>';
        }
return $return;
}

/**
* 获取mysql 语句中limit需要的值
*
* @return string
*/
function offset()
{
return $this->m_offset;
}

/**
* 控制分页显示风格(你可以增加相应的风格)
*
* @param int $mode
* @return string
*/
function show($mode=1)
{
switch ($mode)
{
   case '1':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->first_page().'  '.$this->pre_page().$this->nowbar().$this->next_page().'  '.$this->last_page().$this->select();
    break;
   case '2':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().'[第'.$this->m_current.' 页]'.$this->next_page().$this->last_page().'第'.$this->select().' 页';
    break;
   case '3':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    $this->m_sfirst='首页';
    $this->m_slast='尾页';
    return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
    break;
   case '4':
    $this->m_snext='下一页';
    $this->m_spre='上一页';
    return $this->pre_page().$this->nowbar().$this->next_page();
    break;
   case '5':
    return $this->m_sprebar.$this->pre_page().$this->nowbar().$this->next_page().$this->m_snextbar;
    break;
}

}
/*----------------private function (私有方法)-----------------------------------------------------------*/
/**
* 设置url头地址
* @param: String $url
* @return boolean
*/
function _set_url($url="")
{
if(!empty($url))
{
      //手动设置
   $this->m_url=$url.((stristr($url,'?'))?'&':'?').$this->m_var."=";
}else //自动获取
{
     
   if(empty($_SERVER['QUERY_STRING']))
   {
       //不存在QUERY_STRING时
    $this->m_url=$_SERVER['REQUEST_URI']."?".$this->m_var."=";
   }else
   {
       //
    if(stristr($_SERVER['QUERY_STRING'],$this->m_var.'='))
   {
        //地址存在页面参数
     $this->m_url=str_replace($this->m_var.'='.$this->m_current,'',$_SERVER['REQUEST_URI']);
     $last=$this->m_url[strlen($this->m_url)-1];
     $this->m_url.=($last=='?'||$last=='&')?$this->m_var."=":'&'.$this->m_var."=";
     
   }else
    {
        $this->m_url=$_SERVER['REQUEST_URI'].'&'.$this->m_var.'=';
    // $this->m_url='&'.$this->m_var.'=';
    }//end if   
  }//end if
  $this->m_url=eregi("\?&",$this->m_url)?str_replace('?&','?',$this->m_url):$this->m_url;

}//end if
}

/**
* 设置当前页面
*
*/
function _set_current($nowindex)
{
if(empty($nowindex)){
   //系统获取
  
   if(isset($_GET[$this->m_var])){
    $this->m_current=intval($_GET[$this->m_var]);
   }
}else{
      //手动设置
   $this->m_current=intval($nowindex);
}
}

/**
* 为指定的页面返回地址值
*
* @param int $pageno
* @return string $url
*/
function _get_url($pageno=1)
{
return $this->m_url.$pageno;
}

/**
* 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
*
* @param String $str
* @return string $url
*/
function _add_bracket($str)
{
return $this->m_sleft.$str.$this->m_sright;
}

/**
   * 获取链接地址
*/
function _get_link($url,$text,$style='')
{
$style=(empty($style))?'':'class="'.$style.'"';

   return '<a '.$style.' href="'.$url.'">'.$text.'</a>';

}
/**
   * 出错处理方式
*/
function error($function,$errormsg)
{
     die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> :'.$errormsg);
}
}
?>
[/php]

page.class.rar (2.94 KB)

下载次数:120

2009-2-14 11:25

作者: cnkiller   发布时间: 2009-02-11

学习下

作者: sejie10011   发布时间: 2009-02-14

看下能不能用

作者: sheak   发布时间: 2009-02-14

改成这个消除notice错误。
$barnum=(array_key_exists('barnum',$arr))?intval($arr['barnum']):5;
$this->m_barnum=$barnum;

作者: qq6518980   发布时间: 2009-04-08