一.分頁類<?php namespace Org\Util; class AjaxPage { // 分頁欄每頁顯示的頁數(shù) public $rollPage = 5; // 頁數(shù)跳轉(zhuǎn)時(shí)要帶的參數(shù) public $parameter ; // 默認(rèn)列表每頁顯示行數(shù) public $listRows = 20; // 起始行數(shù) public $firstRow ; // 分頁總頁面數(shù) protected $totalPages ; // 總行數(shù) protected $totalRows ; // 當(dāng)前頁數(shù) protected $nowPage ; // 分頁的欄的總頁數(shù) protected $coolPages ; // 分頁顯示定制 protected $config = array ( 'header' => '條記錄' , 'prev' => '上一頁' , 'next' => '下一頁' , 'first' => '第一頁' , 'last' => '最后一頁' , 'theme' => ' %totalRow% %header% %nowPage%/%totalPage% 頁 %upPage% %downPage% %first% %prePage% %linkPage% %nextPage% %end%' ); // 默認(rèn)分頁變量名 protected $varPage ; public function __construct( $totalRows , $listRows = '' , $ajax_func , $parameter = '' ) { $this ->totalRows = $totalRows ; $this ->ajax_func = $ajax_func ; $this ->parameter = $parameter ; $this ->varPage = C( 'VAR_PAGE' ) ? C( 'VAR_PAGE' ) : 'p' ; if (! empty ( $listRows )) { $this ->listRows = intval ( $listRows ); } $this ->totalPages = ceil ( $this ->totalRows/ $this ->listRows); //總頁數(shù) $this ->coolPages = ceil ( $this ->totalPages/ $this ->rollPage); $this ->nowPage = ! empty ( $_GET [ $this ->varPage])? intval ( $_GET [ $this ->varPage]):1; if (! empty ( $this ->totalPages) && $this ->nowPage> $this ->totalPages) { $this ->nowPage = $this ->totalPages; } $this ->firstRow = $this ->listRows*( $this ->nowPage-1); } public function setConfig( $name , $value ) { if (isset( $this ->config[ $name ])) { $this ->config[ $name ] = $value ; } } public function show() { if (0 == $this ->totalRows) return '' ; $p = $this ->varPage; $nowCoolPage = ceil ( $this ->nowPage/ $this ->rollPage); $url = $_SERVER [ 'REQUEST_URI' ].( strpos ( $_SERVER [ 'REQUEST_URI' ], '?' )? '' : "?" ). $this ->parameter; $parse = parse_url ( $url ); if (isset( $parse [ 'query' ])) { parse_str ( $parse [ 'query' ], $params ); unset( $params [ $p ]); $url = $parse [ 'path' ]. '?' .http_build_query( $params ); } //上下翻頁字符串 $upRow = $this ->nowPage-1; $downRow = $this ->nowPage+1; if ( $upRow >0){ $upPage = "<a id='big' href='javascript:" . $this ->ajax_func. "(" . $upRow . ")'>" . $this ->config[ 'prev' ]. "</a>" ; } else { $upPage = "" ; } if ( $downRow <= $this ->totalPages){ $downPage = "<a id='big' href='javascript:" . $this ->ajax_func. "(" . $downRow . ")'>" . $this ->config[ 'next' ]. "</a>" ; } else { $downPage = "" ; } // << < > >> if ( $nowCoolPage == 1){ $theFirst = "" ; $prePage = "" ; } else { $preRow = $this ->nowPage- $this ->rollPage; $prePage = "<a id='big' href='javascript:" . $this ->ajax_func. "(" . $preRow . ")'>上" . $this ->rollPage. "頁</a>" ; $theFirst = "<a id='big' href='javascript:" . $this ->ajax_func. "(1)' >" . $this ->config[ 'first' ]. "</a>" ; } if ( $nowCoolPage == $this ->coolPages){ $nextPage = "" ; $theEnd = "" ; } else { $nextRow = $this ->nowPage+ $this ->rollPage; $theEndRow = $this ->totalPages; $nextPage = "<a id='big' href='javascript:" . $this ->ajax_func. "(" . $nextRow . ")' >下" . $this ->rollPage. "頁</a>" ; $theEnd = "<a id='big' href='javascript:" . $this ->ajax_func. "(" . $theEndRow . ")' >" . $this ->config[ 'last' ]. "</a>" ; } // 1 2 3 4 5 $linkPage = "" ; for ( $i =1; $i <= $this ->rollPage; $i ++){ $page =( $nowCoolPage -1)* $this ->rollPage+ $i ; if ( $page != $this ->nowPage){ if ( $page <= $this ->totalPages){ $linkPage .= " <a id='big' href='javascript:" . $this ->ajax_func. "(" . $page . ")'> " . $page . " </a>" ; } else { break ; } } else { if ( $this ->totalPages != 1){ $linkPage .= " <span class='current'>" . $page . "</span>" ; } } } $pageStr = str_replace ( array ( '%header%' , '%nowPage%' , '%totalRow%' , '%totalPage%' , '%upPage%' , '%downPage%' , '%first%' , '%prePage%' , '%linkPage%' , '%nextPage%' , '%end%' ), array ( $this ->config[ 'header' ], $this ->nowPage, $this ->totalRows, $this ->totalPages, $upPage , $downPage , $theFirst , $prePage , $linkPage , $nextPage , $theEnd ), $this ->config[ 'theme' ]); return $pageStr ; } } ?> 二.控制器代碼 public function news(){ $credit = M( 'news' ); $count = $credit -> count (); //計(jì)算記錄數(shù) $limitRows = 5; // 設(shè)置每頁記錄數(shù) $p = new \Org\Util\AjaxPage( $count , $limitRows , "news" ); //第三個(gè)參數(shù)是你需要調(diào)用換頁的ajax函數(shù)名 $limit_value = $p ->firstRow . "," . $p ->listRows; $data = $credit ->order( 'news_id desc' )->limit( $limit_value )->select(); // 查詢數(shù)據(jù) $page = $p ->show(); // 產(chǎn)生分頁信息,AJAX的連接在此處生成 $this ->assign( 'list' , $data ); $this ->assign( 'page' , $page ); $this ->display( 'Ajax_news' ); } < html > < head > < title >Ajax無刷新分頁</ title > < script type = "text/javascript" src = "__PUBLIC__/Ajax_js/jquery-1.11.1.min.js" ></ script > < script type = "text/javascript" > function news(id){ //news函數(shù)名 一定要和action中的第三個(gè)參數(shù)一致上面有 var id = id; $.get('{:U("Home/Index/news")}', {'p':id}, function(data){ //IndexAction中的用get方法發(fā)送信息到news方法,注意此處的鏈接 $("#news").replaceWith("< div id = 'news' >"+data+"</ div >"); //news一定要和tpl中的一致 }); } </ script > </ head > < body > < div id = 'news' > <!--這里的news和上面js中的news要一致--> < table > < foreach item = 'v' name = 'list' > < tr >< td >{$v.news_id}</ td >< td >{$v.news_title}</ td ></ tr > </ foreach > </ table > {$page} </ div > </ body > </ html > |
|