超强PHP分页类(转自PHPCHINA)

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


实例应用:
 1 None.gif <?
 2 None.gif require_once ( ' ../libs/classes/page.class.php ' );
 3 None.gif $page = new  page( array ( ' total ' => 1000 , ' perpage ' => 20 ));
 4 None.gif echo   ' mode:1<br> ' . $page -> show();
 5 None.gif echo   ' <hr>mode:2<br> ' . $page -> show( 2 );
 6 None.gif echo   ' <hr>mode:3<br> ' . $page -> show( 3 );
 7 None.gif echo   ' <hr>mode:4<br> ' . $page -> show( 4 );
 8 None.gif echo   ' <hr>开始AJAX模式: ' ;
 9 None.gif $ajaxpage = new  page( array ( ' total ' => 1000 , ' perpage ' => 20 , ' ajax ' => ' ajax_page ' , ' page_name ' => ' test ' ));
10 None.gif echo   ' mode:1<br> ' . $ajaxpage -> show();
11 None.gif ?>  
12 None.gif
13 None.gif
posted on 2007-03-07 09:42 Field 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/field/archive/2007/03/07/666347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值