首頁  >  文章  >  後端開發  >  一個不錯的php分頁類別的程式碼

一個不錯的php分頁類別的程式碼

WBOY
WBOY原創
2016-07-25 09:05:18798瀏覽
  1. /**
  2. * filename: ext_page.class.php
  3. * @package:phpbean
  4. * @author :feifengxlq
  5. * @copyright :Copyright 2006 #gmail.com>
  6. * @copyright :Copyright 2006 #gmail.com>
  7. * @copyright :Copyifeng> :version 2.0
  8. * description: 分頁類,四分頁模式
  9. * 2.0增加功能:支援自訂風格,自訂樣式,同時支援PHP4和PHP5,
  10. * to see detail,please visit http ://www.phpobject.net/blog/read.php?
  11. * example:
  12. * 模式四種分頁模式:
  13. require_once('../libs/classes/page.class.php' );
  14. $page=new page(array('total'=>1000,'perpage'=>20));
  15. echo 'mode:1
    '.$page->show();
  16. echo '
    mode:2
    '.$page->show(2);
  17. echo '
    mode:3
    '.$page->show(3);
  18. echo '
    mode:4
    '.$page->show(4);
  19. 開啟AJAX:
  20. $ajaxpage=new page(array('total'=>1000,' perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
  21. echo 'mode:1
    '.$ajaxpage->show();
  22. 採用繼承自訂分頁顯示模式:
  23. demo:http://www.phpobject.net/blog
  24. */
  25. class page
  26. {
  27. /**
  28. * 配置,公用
  29. */
  30. var $page_name="PB_page";//page標籤,用來控制url頁
  31. var $next_page='>';//下一頁
  32. var $pre_page='var $first_page='First';//首頁
  33. var $last_page='Last';//尾頁
  34. var $pre_bar='var $next_bar='>>';//下一分頁條
  35. var $format_left='[';
  36. var $format_right=']';
  37. var $is_ajax =false;//是否支援AJAX分頁模式
  38. /**

  39. * 私人
  40. *
  41. */
  42. var $pagebarnum=10;//控制記錄列的數量。
  43. var $totalpage=0;//總頁數
  44. var $ajax_action_name='';//AJAX動作名稱
  45. var $nowindex=1;//目前頁
  46. var $url=" ";//url位址頭
  47. var $offset=0;
  48. /**

  49. * 建構子建構子
  50. *
  51. * @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'] , $array['ajax']
  52. */
  53. function page($array)
  54. {
  55. if(is_array($array)){
  56. if(!array_key_exists('total',$array))$this->error(__FUNCTION__,'need a param of total');
  57. $total=intval( $array['total']);
  58. $perpage=(array_key_exists('perpage',$array))?intval($array['perpage']):10;
  59. $nowindex=(array_key_exists(' nowindex',$array))?intval($array['nowindex']):'';
  60. $url=(array_key_exists('url',$array))?$array['url']:'' ;
  61. }else{
  62. $total=$array;
  63. $perpage=10;
  64. $nowindex='';
  65. $url='';
  66. }
  67. if ((!is_int($total))||($totalerror(__FUNCTION__,$total.' is not a positive integer!');
  68. if((!is_int($perpage ))||($perpageerror(__FUNCTION__,$perpage.' is not a positive integer!');
  69. if(!empty($array['page_name'])) $this->set('page_name',$array['page_name']);//設定pagename
  70. $this->_set_nowindex($nowindex);//設定目前頁
  71. $this->_set_url( $url);//設定連結位址
  72. $this->totalpage=ceil($total/$perpage);
  73. $this->offset=($this->nowindex-1)*$perpage;
  74. if(!empty($array['ajax']))$this->open_ajax($array['ajax']);//開啟AJAX模式
  75. }
  76. /**
  77. * 設定類別中指定變數名稱的值,如果改變量不屬於這個類,將throw一個exception
  78. *
  79. * @param string $var
  80. * @param string $value
  81. * /
  82. function set($var,$value)
  83. {
  84. if(in_array($var,get_object_vars($this)))
  85. $this->$var=$value;
  86. else {
  87. $this->error(__FUNCTION__,$var." does not belong to PB_Page!");
  88. }
  89. }

  90. /**
  91. * 開啟倒AJAX模式
  92. * * @param string $action 預設ajax觸發的動作。
  93. */
  94. function open_ajax($action)
  95. {
  96. $this->is_ajax=true;
  97. $this->ajax_action_name=$action;
  98. }
  99. /**
  100. * 取得顯示"下一頁"的程式碼
  101. *
  102. * @param string $style
  103. * @return string
  104. */
  105. function next_page($style='')
  106. {
  107. if($this->nowindextotalpage) {
  108. return $this->_get_link($this->_get_url($this->nowindex+1),$this->next_page,$style);
  109. }
  110. 回傳 ''.$this->next_page.'';
  111. }
  112. /**

  113. * 取得顯示「上一頁」的程式碼
  114. *
  115. * @param string $style
  116. * @return string
  117. */
  118. 函數 pre_page($style='')
  119. {
  120. if($this->; nowindex> 1){
  121. return $this->_get_link($this->_get_url($this->nowindex-1),$this->pre_page,$style);
  122. }
  123. 回傳 ''.$this->pre_page.'';
  124. }
  125. /**

  126. * 取得顯示「首頁」的程式碼
  127. *
  128. * @return string
  129. */
  130. 函數first_page($style='')
  131. {
  132. if($this->; nowindex= =1){
  133. return ''.$this->first_page.'';
  134. }
  135. return $this->_get_link($this->_get_url(1),$this->first_page,$style);
  136. }
  137. /**

  138. * 取得顯示「尾頁」的程式碼
  139. *
  140. * @return string
  141. */
  142. 函數last_page($style='')
  143. {
  144. if($this->; nowindex= =$this->totalpage){
  145. return ''.$this->last_page.'';
  146. }
  147. return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
  148. }
  149. function nowbar($style='',$nowindex_style='')

  150. {
  151. $plus=ceil($this->pagebarnum/ 2);
  152. if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->現在索引);
  153. $begin=$this->nowindex-$plus+1
  154. $begin=($begin>=1)?$begin:1;
  155. $return=''; =$begin;$ipagebarnum;$i++)
  156. {
  157. if($itotalpage){
  158. if($i!=$this- >nowindex)
  159. $return .=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style ));
  160. else
  161. $return. =$this->_get_text(' '.$i.'');
  162. } 否則{
  163. ;
  164. }
  165. $return.="n";
  166. }
  167. 取消設定($begin);
  168. 回傳$return;
  169. /**
  170. * 取得顯示跳轉鈕的程式碼
  171. *
  172. * @return string
  173. */
  174. function select( )
  175. {
  176. $return='';
  177. for($i=1;$itotalpage;$i++)
  178. {
  179. if($i==$this->nowindex ){
  180. $return .=''.$i.'選項>';
  181. }else{
  182. $return.= '';
  183. }
  184. }
  185. 未設定($i);
  186. $return. ='';
  187. 回傳$return;
  188. }
  189. /**

  190. * 取得mysql 語句中limit所需的值
  191. *
  192. * @return string
  193. */
  194. 函數offset()
  195. {
  196. return $this->offset;
  197. }
  198. /**

  199. * 控制分頁顯示風格
  200. *
  201. * @param int $mode
  202. * @return string
  203. */
  204. 函數顯示($mode=1)
  205. {
  206. 開關($mode)
  207. {
  208. case ' 1':
  209. $this->next_page='下一頁';
  210. $this->pre_page='上一頁';
  211. return $this->pre_page().$this->nowbar ().$this->next_page().'第'.$this->select().'頁';
  212. 休息;
  213. 案例'2':
  214. $this->next_page='下一頁';
  215. $this->pre_page='上一頁';
  216. $this->first_page='首頁';
  217. $this->last_page='尾頁';
  218. return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'頁]'.$this->next_page().$this ->last_page().'第'.$this->select().'頁';
  219. 休息;
  220. 案例'3':
  221. $this->next_page='下一頁';
  222. $this-> pre_page='上一頁';
  223. $this->first_page='首頁';
  224. $this->last_page='尾頁';
  225. 回傳$this->first_page().$this- >pre_page().$this->next_page().$this->last_page();
  226. 休息;
  227. 案例'4':
  228. $this->next_page='下一頁';
  229. $this->pre_page='上一頁';
  230. 返回$this->pre_page().$this->nowbar().$this->next_page();
  231. 休息;
  232. 案例'5':
  233. 返回$this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this ->next_bar();
  234. 休息;
  235. }
  236. }

  237. /*------私有函數(私有方法)---------*/
  238. /* *@link:http://bbs.it-home.org
  239. * 設定url頭位址
  240. * @param: String $url
  241. * @return boolean
  242. */
  243. function _set_url($url="")
  244. {
  245. if(!empty($url)){
  246. //手動設定
  247. $this- >; url=$url.((stristr($url,'?'))?'&':'?').$this->page_name."=";
  248. }else{
  249. //自動取得
  250. if(empty($_SERVER['QUERY_STRING'])){
  251. //不存在QUERY_STRING($_SERVER['QUERY_STRING'])){
  252. //不存在QUERY_STRING時
  253. $this->url=$ _SERVER['REQUEST_URI']."?".$ this->page_name."=";
  254. }else{
  255. //
  256. if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){
  257. // 存在位址頁面參數
  258. $this->url=str_replace($this->page_name.'='.$this->nowindex,'',$_SERVER['REQUEST_URI']);
  259. $last =$this->url[strlen($this->url)-1];
  260. if($last=='?'||$last=='&'){
  261. $this->url .=$this->page_name."=";
  262. }else{
  263. $this->url.='&'.$this->page_name."=";
  264. }
  265. } else{
  266. //
  267. $this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'=';
  268. }//結束如果
  269. } //結束如果
  270. }//結束如果
  271. }
  272. /**

  273. * 設定目前頁
  274. *
  275. */
  276. function _set_nowindex($nowindex)
  277. {
  278. if(empty($nowindex)){
  279. //系統取得
  280. if(isset($_GET[$ this->page_name])){

  281. $this->nowindex =intval($_GET[$this->page_name]);
  282. }
  283. }else{
  284. //手動設定
  285. $this->nowindex=intval($nowindex);
  286. }
  287. }
  288. /**

  289. * 為指定的頁面傳回位址值
  290. *
  291. * @param int $pageno
  292. * @return string $url
  293. */
  294. 函數_get_url($pageno=1)
  295. {
  296. 回傳$this- > url.$pageno ;
  297. }
  298. /**

  299. * 取得分頁顯示文字,比如說預設_get_text('1')會回傳[1]
  300. *
  301. * @param String $str
  302. * @return string $url
  303. */
  304. function _get_text($str)
  305. {
  306. return $this->format_left.$str .$ this->format_right;
  307. }
  308. /**

  309. * 取得連結位址
  310. */
  311. function _get_link($url,$text,$style=''){
  312. $ style=(空($style))?'':'class="'.$style.'"';
  313. if($this->is_ajax){
  314. //如果使用AJAX模式
  315. return ''.$text.'';
  316. }else{
  317. 回傳''.$text.'';
  318. }
  319. }
  320. /**
  321. * 出錯處理方式
  322. */
  323. 函數錯誤($function,$errormsg)
  324. {
  325. die('檔案中出現錯誤'. __FILE__.',函數'.$function.'():'.$errormsg);
  326. } }
  327. $page=新頁(array('total'=>1000,'perpage'=>20));
  328. echo 'mode:1
    '.$page->show();
  329. echo '
    mode:2
    '.$page->show(2);
  330. echo '
    mode:3
    '.$page->show(3);
  331. echo '
    mode:4
    '.$page->show(4);
  332. echo '
    開始AJAX模式:';
  333. $ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
  334. echo 'mode:1
    '.$ajaxpage->show();
  335. ?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn