首页 > 开发 > PHP > 正文

php 多风格的分页类(支持ajax分页)

2024-05-04 23:06:55
字体:
来源:转载
供稿:网友
  1. <?php 
  2. /** 
  3. * example: 
  4. * 模式四种分页模式: 
  5.    require_once('../libs/classes/page.class.php'); 
  6.    $page=new page(array('total'=>1000,'perpage'=>20)); 
  7.    echo 'mode:1<br>'.$page->show(); 
  8.    echo '<hr>mode:2<br>'.$page->show(2); 
  9.    echo '<hr>mode:3<br>'.$page->show(3); 
  10.    echo '<hr>mode:4<br>'.$page->show(4); 
  11.    开启AJAX: 
  12.    $ajaxpage=new page(array 
  13. ('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test')); 
  14.    echo 'mode:1<br>'.$ajaxpage->show(); 
  15.    采用继承自定义分页显示模式: 
  16. */ 
  17. class page 
  18. /** 
  19. * config ,public 
  20. */ 
  21. var $page_name="PB_page";//page标签,用来控制url页 
  22. var $next_page='>';//下一页 
  23. var $pre_page='<';//上一页 
  24. var $first_page='First';//首页 
  25. var $last_page='Last';//尾页 
  26. var $pre_bar='<<';//上一分页条 
  27. var $next_bar='>>';//下一分页条 
  28. var $format_left='['
  29. var $format_right=']'
  30. var $is_ajax=false;//是否支持AJAX分页模式 
  31. /** 
  32. * private 
  33. * 
  34. */ 
  35. var $pagebarnum=10;//控制记录条的个数。 
  36. var $totalpage=0;//总页数 
  37. var $ajax_action_name='';//AJAX动作名 
  38. //开源代码Vevb.com 
  39. var $nowindex=1;//当前页 
  40. var $url="";//url地址头 
  41. var $offset=0; 
  42. /** 
  43. * constructor构造函数 
  44. * 
  45. * @param array $array['total'],$array['perpage'],$array['nowindex'],$array 
  46. ['url'],$array['ajax'] 
  47. */ 
  48. function page($array
  49. if(is_array($array)){ 
  50.      if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param 
  51. of total'); 
  52.      $total=intval($array['total']); 
  53.      $perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10; 
  54.      $nowindex=(array_key_exists('nowindex',$array))?intval($array 
  55. ['nowindex']):''
  56.      $url=(array_key_exists('url',$array))?$array['url']:''
  57. }else
  58.      $total=$array
  59.      $perpage=10; 
  60.      $nowindex=''
  61.      $url=''
  62. if((!is_int($total))||($total<0))$this->error(__FUNCTION__,$total.' is not a 
  63. positive integer!'); 
  64. if((!is_int($perpage))||($perpage<=0))$this->error(__FUNCTION__,$perpage.' is not 
  65. a positive integer!'); 
  66. if(!emptyempty($array['page_name']))$this->set('page_name',$array['page_name']);//设置 
  67. pagename 
  68. $this->_set_nowindex($nowindex);//设置当前页 
  69. $this->_set_url($url);//设置链接地址 
  70. $this->totalpage=ceil($total/$perpage); 
  71. $this->offset=($this->nowindex-1)*$perpage
  72. if(!emptyempty($array['ajax']))$this->open_ajax($array['ajax']);//打开AJAX模式 
  73. /** 
  74. * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception 
  75. * 
  76. * @param string $var 
  77. * @param string $value 
  78. */ 
  79. function set($var,$value
  80. if(in_array($var,get_object_vars($this))) 
  81.      $this->$var=$value
  82. else { 
  83.    $this->error(__FUNCTION__,$var." does not belong to PB_Page!"); 
  84. /** 
  85. * 打开倒AJAX模式 
  86. * 
  87. * @param string $action 默认ajax触发的动作。 
  88. */ 
  89. function open_ajax($action
  90. $this->is_ajax=true; 
  91. $this->ajax_action_name=$action
  92. /** 
  93. * 获取显示"下一页"的代码 
  94. * 
  95. * @param string $style 
  96. * @return string 
  97. */ 
  98. function next_page($style=''
  99. if($this->nowindex<$this->totalpage){ 
  100.    return $this->_get_link($this->_get_url($this->nowindex+1),$this
  101. >next_page,$style); 
  102. return '<span class=".$style.">'.$this->next_page.'</span>'
  103. /** 
  104. * 获取显示“上一页”的代码 
  105. * 
  106. * @param string $style 
  107. * @return string 
  108. */ 
  109. function pre_page($style=''
  110. if($this->nowindex>1){ 
  111.    return $this->_get_link($this->_get_url($this->nowindex-1),$this
  112. >pre_page,$style); 
  113. return '<span class=".$style.">'.$this->pre_page.'</span>'
  114. /** 
  115. * 获取显示“首页”的代码 
  116. * 
  117. * @return string 
  118. */ 
  119. function first_page($style=''
  120. if($this->nowindex==1){ 
  121.       return '<span class=".$style.">'.$this->first_page.'</span>'
  122. return $this->_get_link($this->_get_url(1),$this->first_page,$style); 
  123. /** 
  124. * 获取显示“尾页”的代码 
  125. * 
  126. * @return string 
  127. */ 
  128. function last_page($style=''
  129. if($this->nowindex==$this->totalpage){ 
  130.       return '<span class=".$style.">'.$this->last_page.'</span>'
  131. return $this->_get_link($this->_get_url($this->totalpage),$this
  132. >last_page,$style); 
  133. function nowbar($style='',$nowindex_style=''
  134. $plus=ceil($this->pagebarnum/2); 
  135. if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this
  136. >pagebarnum-$this->totalpage+$this->nowindex); 
  137. $begin=$this->nowindex-$plus+1; 
  138. $begin=($begin>=1)?$begin:1; 
  139. $return=''
  140. for($i=$begin;$i<$begin+$this->pagebarnum;$i++) 
  141.    if($i<=$this->totalpage){ 
  142.     if($i!=$this->nowindex) 
  143.         $return.=$this->_get_text($this->_get_link($this->_get_url 
  144. ($i),$i,$style)); 
  145.     else 
  146.         $return.=$this->_get_text('<span 
  147. class=".$nowindex_style.">'.$i.'</span>'); 
  148.    }else
  149.     break
  150.    } 
  151.    $return.="n"
  152. unset($begin); 
  153. return $return
  154. /** 
  155. * 获取显示跳转按钮的代码 
  156. * 
  157. * @return string 
  158. */ 
  159. function select() 
  160.    $return='<select name="PB_Page_Select">'
  161. for($i=1;$i<=$this->totalpage;$i++) 
  162.    if($i==$this->nowindex){ 
  163.     $return.='<option value="'.$i.'" selected>'.$i.'</option>'
  164.    }else
  165.     $return.='<option value="'.$i.'">'.$i.'</option>'
  166.    } 
  167. unset($i); 
  168. $return.='</select>'
  169. return $return
  170. /** 
  171. * 获取mysql教程 语句中limit需要的值 
  172. * 
  173. * @return string 
  174. */ 
  175. function offset() 
  176. return $this->offset; 
  177. /** 
  178. * 控制分页显示风格  
  179. * 
  180. * @param int $mode 
  181. * @return string 
  182. */ 
  183. function show($mode=1) 
  184. switch ($mode
  185.    case '1'
  186.     $this->next_page='下一页'
  187.     $this->pre_page='上一页'
  188.     return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this
  189. >select().'页'
  190.     break
  191.    case '2'
  192.     $this->next_page='下一页'
  193.     $this->pre_page='上一页'
  194.     $this->first_page='首页'
  195.     $this->last_page='尾页'
  196.     return $this->first_page().$this->pre_page().'[第'.$this
  197. >nowindex.'页]'.$this->next_page().$this->last_page().'第'.$this->select().'页'
  198.     break
  199.    case '3'
  200.     $this->next_page='下一页'
  201.     $this->pre_page='上一页'
  202.     $this->first_page='首页'
  203.     $this->last_page='尾页'
  204.     return $this->first_page().$this->pre_page().$this->next_page().$this
  205. >last_page(); 
  206.     break
  207.    case '4'
  208.     $this->next_page='下一页'
  209.     $this->pre_page='上一页'
  210.     return $this->pre_page().$this->nowbar().$this->next_page(); 
  211.     break
  212.    case '5'
  213.     return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page 
  214. ().$this->next_bar(); 
  215.     break
  216. /*----------------private function (私有方法)----------------------------------- 
  217. ------------------------*/ 
  218. /** 
  219. * 设置url头地址 
  220. * @param: String $url 
  221. * @return boolean 
  222. */ 
  223. function _set_url($url=""
  224. if(!emptyempty($url)){ 
  225.       //手动设置 
  226.    $this->url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."="
  227. }else
  228.       //自动获取 
  229.    if(emptyempty($_SERVER['QUERY_STRING'])){ 
  230.        //不存在QUERY_STRING时 
  231.     $this->url=$_SERVER['REQUEST_URI']."?".$this->page_name."="
  232.    }else
  233.        // 
  234.     if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){ 
  235.         //地址存在页面参数 
  236.      $this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_SERVER 
  237. ['REQUEST_URI']); 
  238.      $last=$this->url[strlen($this->url)-1]; 
  239.      if($last=='?'||$last=='&'){ 
  240.          $this->url.=$this->page_name."="
  241.      }else
  242.          $this->url.='&'.$this->page_name."="
  243.      } 
  244.     }else
  245.         // 
  246.      $this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'='
  247.     }//end if    
  248.    }//end if 
  249. }//end if 
  250. /** 
  251. * 设置当前页面 
  252. * 
  253. */ 
  254. function _set_nowindex($nowindex
  255. if(emptyempty($nowindex)){ 
  256.    //系统获取 
  257.    if(isset($_GET[$this->page_name])){ 
  258.     $this->nowindex=intval($_GET[$this->page_name]); 
  259.    } 
  260. }else
  261.       //手动设置 
  262.    $this->nowindex=intval($nowindex); 
  263. /** 
  264. * 为指定的页面返回地址值 
  265. * 
  266. * @param int $pageno 
  267. * @return string $url 
  268. */ 
  269. function _get_url($pageno=1) 
  270. return $this->url.$pageno
  271. /** 
  272. * 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a 
  273. href="">1</a>] 
  274. * 
  275. * @param String $str 
  276. * @return string $url 
  277. */ 
  278. function _get_text($str
  279. return $this->format_left.$str.$this->format_right; 
  280. /** 
  281.    * 获取链接地址 
  282. */ 
  283. function _get_link($url,$text,$style=''){ 
  284. $style=(emptyempty($style))?'':'class="'.$style.'"'
  285. if($this->is_ajax){ 
  286.       //如果是使用AJAX模式 
  287.    return '<a '.$style.' href="网页特效:'.$this
  288. >ajax_action_name.'(''.$url.'')">'.$text.'</a>'
  289. }else
  290.    return '<a '.$style.' href="'.$url.'">'.$text.'</a>'
  291. /** 
  292.    * 出错处理方式 
  293. */ 
  294. function error($function,$errormsg
  295.      die('Error in file <b>'.__FILE__.'</b> ,Function <b>'.$function.'()</b> 
  296. :'.$errormsg); 
  297. $page=new page(array('total'=>1000,'perpage'=>20)); 
  298. echo 'mode:1<br>'.$page->show(); 
  299. echo '<hr>mode:2<br>'.$page->show(2); 
  300. echo '<hr>mode:3<br>'.$page->show(3); 
  301. echo '<hr>mode:4<br>'.$page->show(4); 
  302. echo '<hr>开始AJAX模式:'
  303. $ajaxpage=new page(array 
  304. ('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test')); 
  305. echo 'mode:1<br>'.$ajaxpage->show(); 
  306. ?> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表