ホームページ >バックエンド開発 >PHPチュートリアル >シェア: PHP ページめくり (ページング) クラスのコード例

シェア: PHP ページめくり (ページング) クラスのコード例

WBOY
WBOYオリジナル
2016-07-25 08:52:25992ブラウズ
  1. /**
  2. * ファイル名: ext_page.class.php
  3. * @package:phpbean
  4. * 説明: 超強力なページング クラス、4 つのページング モード、デフォルトのページング スタイルは Baidu や Google に似ています。
  5. * 2.0 追加機能: カスタム スタイル、カスタム スタイルをサポート、PHP4 と PHP5 の両方をサポート、
  6. * 例:
  7. * 4 つのページング モード:
  8. require_once('../libs/classes/page.class.php' ); page=new page(array('total'=>1000,'perpage'=>20));
  9. echo 'mode:1
    '.$page->show(); hr>mode:2
    '.$page->show(2);
  10. echo '
    mode:3
    '
  11. echo '< hr>mode:4
    '.$page->show(4);
  12. AJAX をオンにする:
  13. $ajaxpage=new page(array('total'=>1000,'perpage'=> ;20, 'ajax'=>'ajax_page','page_name'=>'test'));
  14. echo 'mode:1
    '.$ajaxpage->show();
  15. 継承カスタマイズのページネーション表示モードを使用します。
  16. 編集: スクリプト スクール http://bbs.it-home.org
  17. */
  18. class _page
  19. {
  20. /**
  21. * 設定、公開
  22. */
  23. var $page_name="PB_page";// URL の制御に使用されるページタグページ。たとえば、xxx.php?PB_page=2 の PB_page
  24. var $next_page='>';//次のページ
  25. var $pre_page='<';//前のページ
  26. var $first_page='First' ;/ /Homepage
  27. var $last_page='Last';//最後のページ
  28. var $pre_bar='<<';//前のページングバー
  29. var $next_bar='>>';//次のページングバー
  30. var $format_left='[';
  31. var $format_right=']';
  32. var $is_ajax=false;//AJAX ページング モードがサポートされているかどうか
  33. /**
  34. *プライベート
  35. *
  36. */
  37. var $pagebarnum= 10; //レコードストリップの数を制御します。
  38. var $totalpage=0;//総ページ数
  39. var $ajax_action_name='';//AJAXアクション名
  40. var $nowindex=1;//現在のページ
  41. var $url="";//URLアドレスヘッダー
  42. var $offset=0;
  43. /**
  44. * コンストラクター构造関数数
  45. *
  46. * @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax' ]...
  47. */
  48. 関数ページ($array)
  49. {
  50. if(is_array($array)){
  51. if(!array_key_exists('total',$array)) $ this->error(__FUNCTION__,'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['nowindex']):''; URL ',$array))?$array['url']:'';
  55. }else{
  56. $perpage='';
  57. }
  58. if((!is_int($total))||($total if(!empty($array['page_name']) ) )$this->set('page_name',$array['page_name']);// ページ名を設定
  59. $this->_set_nowindex($nowindex);// 現在のページを設定
  60. $this-> _set_url( $url);// リンクアドレスを設定します
  61. $this->totalpage=ceil($total/$perpage);
  62. $this->offset=($this->nowindex-1)*$perpage ;
  63. if (!empty($array['ajax']))$this->open_ajax($array['ajax']);//AJAX モードを開く
  64. }
  65. /**
  66. * 指定された変数名の値をクラスに設定します。変更がこのクラスに属さない場合、例外がスローされます
  67. *
  68. * @param string $var
  69. * @param string $value
  70. */
  71. 関数set($ var,$value)
  72. {
  73. if(in_array($var,get_object_vars($this)))
  74. $this->$var=$value;
  75. else {
  76. $this->error(__FUNCTION__, $var. " は PB_Page に属しません!");
  77. }
  78. }
  79. /**
  80. * 逆 AJAX モードをオンにする
  81. *
  82. * @param string $action デフォルトの ajax トリガー アクション。
  83. */
  84. function open_ajax($action)
  85. {
  86. $this->is_ajax=true;
  87. $this->ajax_action_name=$action;
  88. }
  89. /**
  90. * 「次のページ」を表示するコードを取得します
  91. *
  92. * @param string $style
  93. * @return string
  94. */
  95. function next_page($style='')
  96. {
  97. if($this->nowindextotalpage){
  98. return $this->_get_link( $this->_get_url($this->>nowindex+1),$this->next_page,$style);
  99. }
  100. return ''.$this->next_page.'';
  101. }
  102. /**
  103. * 「前のページ」を表示するコードを取得します
  104. *
  105. * @param string $style
  106. * @return string
  107. */
  108. function pre_page($style='')
  109. {
  110. if($this->nowindex>1){
  111. return $this->gt;_get_link($this-> ;_get_url($this->nowindex-1),$this->pre_page,$style);
  112. }
  113. return ''.$this->pre_page.'';
  114. }
  115. /**
  116. * 「ホームページ」を表示するコードを取得します
  117. *
  118. * @return string
  119. */
  120. function first_page($style='')
  121. {
  122. if($this->nowindex==1){
  123. return ''.$this->first_page.'';
  124. }
  125. return $this->_get_link($this->_get_url(1),$this->first_page,$style);
  126. }
  127. /**
  128. * 「最後のページ」を表示するコードを取得します
  129. *
  130. * @return string
  131. */
  132. function last_page($style='')
  133. {
  134. if($this->nowindex==$this->totalpage){
  135. return ''.$this->last_page.'';
  136. }
  137. return $this->_get_link($this->_get_url($this->totalpage),$this->last_page,$style);
  138. }
  139. 関数 nowbar($style='',$nowindex_style='')
  140. {
  141. $plus=ceil($this->pagebarnum/2);
  142. if($this->pagebarnum-$plus+$this->nowindex>$this->totalpage)$plus=($this->pagebarnum-$this->totalpage+$this->nowindex) ;
  143. $begin=$this->nowindex-$plus+1;
  144. $begin=($begin>=1)?$begin:1;
  145. $return='';
  146. for($i=$begin;$i<$begin+$this->pagebarnum;$i++)
  147. {
  148. if($i<=$this->totalpage){
  149. if($i!=$this ->nowindex)
  150. $return.=$this->_get_text($this->_get_link($this->_get_url($i),$i,$style));
  151. else
  152. $return.=$this->_get_text(''.$i.'');
  153. }else{
  154. 休憩;
  155. }
  156. $return.="n";
  157. }
  158. unset($begin);
  159. $return を返します;
  160. }
  161. /**
  162. * ジャンプボタンを表示するコードを取得します
  163. *
  164. * @return string
  165. */
  166. function select()
  167. {
  168. $return='';
  169. $return を返します;
  170. }
  171. /**
  172. * mysql ステートメントの制限に必要な値を取得します
  173. *
  174. * @return string
  175. */
  176. function offset()
  177. {
  178. return $this->offset;
  179. }
  180. /**
  181. * ページング表示スタイルの制御 (対応するスタイルを追加できます)
  182. *
  183. * @param int $mode
  184. * @return string
  185. */
  186. function show($mode=1)
  187. {
  188. switch ($mode)
  189. {
  190. case '1':
  191. $this->next_page='下一页';
  192. $this->pre_page='上一页';
  193. return $this->pre_page().$this->nowbar().$this->next_page().'第'.$this->select().'页';
  194. 休憩;
  195. ケース '2':
  196. $this->next_page='下一页';
  197. $this->pre_page='上一页';
  198. $this->first_page='首页';
  199. $this->last_page='尾页';
  200. return $this->first_page().$this->pre_page().'[第'.$this->nowindex.'页]'.$this->next_page().$this-> ;last_page().'第'.$this->select().'页';
  201. 休憩;
  202. ケース '3':
  203. $this->next_page='下一页';
  204. $this->pre_page='上一页';
  205. $this->first_page='首页';
  206. $this->last_page='尾页';
  207. return $this->first_page().$this->pre_page().$this->next_page().$this->last_page();
  208. 休憩;
  209. ケース '4':
  210. $this->next_page='下一页';
  211. $this->pre_page='上一页';
  212. return $this->pre_page().$this->nowbar().$this->next_page();
  213. 休憩;
  214. case '5':
  215. return $this->pre_bar().$this->pre_page().$this->nowbar().$this->next_page().$this->next_bar ();
  216. 休憩;
  217. ケース '6':
  218. return $this->select();
  219. 休憩;
  220. ケース '7':
  221. return $this->nowbar();
  222. 休憩;
  223. }
  224. }
  225. /*----------------private function (私有メソッド)---------------------- ---------------------------------------*/
  226. /**
  227. * URLヘッダーアドレスを設定します
  228. * @param: String $url
  229. * @return boolean
  230. */
  231. function _set_url($url="")
  232. {
  233. if(!empty($url)){
  234. //手動设置
  235. $this->url=$url.((stristr($url,'?') )?'&':'?').$this->page_name."=";
  236. }else{
  237. //自動获取
  238. if(empty($_SERVER['QUERY_STRING'])){
  239. //QUERY_STRING が存在しないとき
  240. $this->url=$_SERVER['REQUEST_URI']."?" .$this->page_name."=";
  241. }else{
  242. //
  243. if(stristr($_SERVER['QUERY_STRING'],$this->page_name.'=')){
  244. //地址存在页面パラメータ
  245. $this->url=str_replace( $this->page_name.'='.$this->nowindex,'',$_SERVER['REQUEST_URI']);
  246. $last=$this->url[strlen($this->url)-1];
  247. if($last=='?'||$last=='&'){
  248. $this->url.=$this->page_name."=";
  249. }else{
  250. $this->url.='&'.$this->page_name."=";
  251. }
  252. }else{
  253. //
  254. $this->url=$_SERVER['REQUEST_URI'].'&'.$this->page_name.'=';
  255. }//end if
  256. }//end if
  257. }//end if
  258. }
  259. /**
  260. * 現在のページを設定します
  261. *
  262. */
  263. function _set_nowindex($nowindex)
  264. {
  265. if(empty($nowindex)){
  266. //系统获取
  267. if(isset($_GET[$this->page_name])){
  268. $this->nowindex=intval($_GET[$this->page_name]);
  269. }
  270. if(isset($_POST['PB_Page_Select'])){
  271. $this->nowindex=$_POST['PB_Page_Select'];
  272. }
  273. }else{
  274. //手動設定
  275. $this->nowindex=intval($nowindex);
  276. }
  277. }
  278. /**
  279. * 指定されたページのアドレス値を返します
  280. *
  281. * @param int $pageno
  282. * @return string $url
  283. */
  284. function _get_url($pageno=1)
  285. {
  286. return $this->url.$pageno;
  287. }
  288. /**
  289. * ページネーションの表示テキストを取得します。たとえば、デフォルトでは _get_text('1') は [1] を返します
  290. *
  291. * @param 文字列 $str
  292. * @return 文字列 $url
  293. */
  294. function _get_text($str)
  295. {
  296. return $this->format_left.$str.$this->format_right;
  297. }
  298. /**
  299. * リンクアドレスを取得します
  300. */
  301. function _get_link($url,$text,$style=''){
  302. $style=(empty($style))?'':'class="'。 $style.'"';
  303. if($this->is_ajax){
  304. //結果として AJAX モードを使用します
  305. return ''.$text.'';
  306. }else{
  307. return ''.$text.'';
  308. }
  309. }
  310. /**
  311. ※エラー時の対処方法
  312. */
  313. function error($function,$errormsg)
  314. {
  315. die('ファイル '.__FILE__.' ,関数 '. $function.'() :'.$errormsg);
  316. }
  317. }
  318. // ページング クラスを継承し、データベース アクセス機能を追加します。
  319. var $db;接続されたオブジェクト
  320. var $_Sql_Query = ''; // データベースの SQL をクエリします
  321. var $_Total = 0; // クエリされるレコードの合計が
  322. である必要があります var $_Rst = array();
  323. / **
  324. * ページング クエリ ライブラリ
  325. *
  326. * @param String $Sql レコード クエリ SQL ステートメント
  327. * @param int $pagen 現在のページ。ページング リンクに取り込まれるパラメータ。
  328. * @param String $pname 特別な要件がある場合のデフォルトは、index.php?xx=b&bb=33&page=2 です。 $pname のパラメータを変更できます。例: $pname='db_page' は、index.php?xx=b&bb=33&db_page=2
  329. * @return Mysql_Page
  330. となります。*/
  331. function Page($db, $sql_query = '', $max_rows_per_page = 20, $current_page_number = 0, $url = '', $parameters = '', $pname = 'PB_page ', $otc = '*') {
  332. $this ->
  333. $pos_to = strlen($sql_query);
  334. $pos_group_by = strpos ($sql_query, ' group by', $pos_from);
  335. if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by
  336. $pos_having = strpos($sql_query, ' を持っています ', $pos_from);
  337. if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having
  338. $pos_order_by = strpos($sql_query, ' order by', $pos_from; );
  339. if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by ($this -> db -> otc) as total " .substr($sql_query, $pos_from, ($pos_to - $pos_from)));
  340. $query_num_rows = $reviews_count[0]['total'];
  341. $this -> _Total = $query_num_rows;
  342. $num_pages = ceil($query_num_rows / $max_rows_per_pages);
  343. if ($current_page_number > $num_pages) {
  344. $current_page_number = $num_pages; }
  345. $offset = ($max_rows_per_page * ($current_page_number - 1));
  346. if ($offset if ($offset > 0) {
  347. $offset = $offset + 1; }
  348. $this -> $sql_query 。 offset . ", " . $max_rows_per_page;
  349. $this -> setData() // データベースをクエリします。 $query_num_rows, 'perpage' => , 'page_name' = > $pname, 'url' => $url, 'parameters' => $parameters));
  350. /**
  351. * 現在のページのレコードを取得し、配列を返します。*/
  352. 関数 findByAll() $this ->Rst;
  353. /**
  354. * ページング情報を表示します
  355. *
  356. * @param int $model
  357. */
  358. 関数 dispaly_links($model) {
  359. $this -> show($model) }
  360. /**
  361. * レコードの数を返します
  362. *
  363. * @return Int
  364. */
  365. 関数 getCount() {
  366. return $this -> _Total }
  367. /**
  368. * クエリ結果レコードの数を取得します。
  369. *
  370. * @return Int
  371. */
  372. function getRows() {
  373. return $this -> _Rst; }
  374. * クエリ関数を実行します。
  375. * プライベートメソッド。*/
  376. 関数 setData() { _Rst = $this -> getResults($this -> _Sql_Query);
  377. ;コード
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。