/** * filename:ext_page.class.php * @package:p Hpbean * @author: FEIFENGXLQ * @copyright: Copyright 2006 FEIFENGXLQ * @license: Version 2.0 * @create: 2006-5-31 * @modify: 2006-6-1 * @modify: FEIFENGXLQ 2006-11-4 * Description: Ultra-strong paging class, four paging modes, default to a baidu,google-like paging style. * 2.0 added Features: Support custom style, custom style, support PHP4 and PHP5, * To see Detail,please visit http://www.bKjia.c0m * Example: * Mode four paging modes: Require_once ('.. /libs/classes/page.class.php '); $page =new page (Array (' Total ' =>1000, ' perpage ' =>20)); Echo ' Mode:1 '. $page->show (); Echo ' Mode:2 '. $page->show (2); Echo ' Mode:3 '. $page->show (3); Echo ' Mode:4 '. $page->show (4); Turn on Ajax: $ajaxpage =new page (Array (' Total ' =>1000, ' perpage ' =>20, ' ajax ' = ' ajax_page ', ' page_name ' = ' test ')); Echo ' Mode:1 '. $ajaxpage->show (); Adopt the inherited custom paging display mode: Demo:[url=http://www.phpobject.net/blog]http://www.phpobject.net/blog[/url] */ Class Page { /** * Config, public */ var $page _name= "P";//page tag, used to control the URL page. such as xxx.php? The Pb_page in pb_page=2 var $next _page= ' > ';//Next page var $pre _page= ' < ';//prev var $first _page= ' first ';//Home var $last _page= ' last ';//End var $pre _bar= ' << ';//previous page bar var $next _bar= ' >> ';//Next page Bar var $format _left= '; var $format _right= '; var $is whether _ajax=false;//supports Ajax paging mode /** * Private * */ var $pagebarnum =10;//Control the number of record bars. var $totalpage total Pages =0;// var $ajax _action_name= ";//ajax action Name var $nowindex =1;//Current Page var $url = "";//url address Header var $offset = 0; /** * Constructor Constructor * * @param array $array [' total '], $array [' Perpage '], $array [' Nowindex '], $array [' url '], $array [' Ajax '] ... */ Function page ($array) { if (Is_array ($array)) { if (!array_key_exists (' Total ', $array)) $this->error (__function__, ' need a param of total '); $total =intval ($array [' total ']); $perpage = (array_key_exists (' Perpage ', $array))? intval ($array [' Perpage ']): 10; $nowindex = (array_key_exists (' Nowindex ', $array))? intval ($array [' Nowindex ']): '; $url = (array_key_exists (' url ', $array))? $array [' url ']: '; }else{ $total = $array; $perpage = 10; $nowindex = "; $url = "; } if ((!is_int ($total)) | | ($total <0)) $this->error (__function__, $total. ' is not a positive integer! '); if ((!is_int ($perpage)) | | ($perpage <=0)) $this->error (__function__, $perpage. ' is not a positive integer! '); if (!empty ($array [' page_name '])) $this->set (' page_name ', $array [' page_name ']);//set PAGENAME $this->_set_nowindex ($nowindex);//Set the current page $this->_set_url ($url);//Set link address $this->totalpage=ceil ($total/$perpage); $this->offset= ($this->nowindex-1) * $perpage; if (!empty ($array [' Ajax])) $this->open_ajax ($array [' Ajax ']);//Open Ajax mode } /** * Set the value of the variable name specified in the class, if the change does not belong to this class, will throw a exception * * @param string $var * @param string $value */ function set ($var, $value) { if (In_array ($var, Get_object_vars ($this))) $this $var = $value; else { $this->error (__function__, $var. "Does not belong to pb_page!"); } } /** * Turn on inverted Ajax mode * * @param string $action The default Ajax-triggered action. */ function Open_ajax ($action) { $this->is_ajax=true; $this->ajax_action_name= $action; } /** * Get the code that shows "next page" * * @param string $style * @return String */ function Next_page ($style = ") { if ($this->nowindex< $this->totalpage) { return $this->_get_link ($this->_get_url ($this->nowindex+1), $this->next_page, $style); } Return ". $this->next_page."; } /** * Get the code that shows "previous page" * * @param string $style * @return String */ function Pre_page ($style = ") { if ($this->nowindex>1) { return $this->_get_link ($this->_get_url ($this->nowindex-1), $this->pre_page, $style); } Return ". $this->pre_page."; } /** * Get the code that shows "home page" * * @return String */ function First_page ($style = ") { if ($this->nowindex==1) { Return ". $this->first_page."; } return $this->_get_link ($this->_get_url (1), $this->first_page, $style); } /** * Get the code that shows "last" * * @return String */ function Last_page ($style = ") { if ($this->nowindex== $this->totalpage) { Return ". $this->last_page."; } return $this->_get_link ($this->_get_url ($this->totalpage), $this->last_page, $style); } function Nowbar ($style = ", $nowindex _style= ' C ') { $plus =ceil ($this->PAGEBARNUM/2); if ($this->pagebarnum-$plus + $this->nowindex> $this->totalpage) $plus = ($this->pagebarnum-$this totalpage+ $this->nowindex); $begin = $this->nowindex-$plus +1; $begin = ($begin >=1)? $begin: 1; $return = "; for ($i = $begin; $i < $begin + $this->pagebarnum; $i + +) { if ($i <= $this->totalpage) { if ($i! = $this->nowindex) $return. = $this->_get_text ($this->_get_link ($this->_get_url ($i), $i, $style)); Else $return. = $this->_get_text (''. $i. ''); }else{ Break } $return. = "n"; } Unset ($begin); return $return; } /** * Get the code to show the Jump button * * @return String */ function Select () { $return = ''; for ($i =1; $i <= $this->totalpage; $i + +) {if ($i = = $this->nowindex) {$return. = ''. $i. '; }else{$return. = ''. $i. '; }} unset ($i); $return. = ''; return $return; } /** * Get the value required for limit in MySQL statement * * @return String */ function offset () { return $this->offset; } /** * Control the pagination display style (you can add the corresponding style) * * @param int $mode * @return String */ Function Show ($mode =1) { Switch ($mode) { Case ' 1 ': $this->next_page= ' next page '; $this->pre_page= ' previous page '; return $this->pre_page (). $this->nowbar (). $this->next_page (). ' Section '. $this->select (). ' Page '; Break Case ' 2 ': $this->next_page= ' next page '; $this->pre_page= ' previous page '; $this->first_page= ' home '; $this->last_page= ' last '; return $this->first_page (). $this->pre_page (). ' [No. $this->nowindex] '. $this->next_page (). $this->last_page (). ' Section '. $this->select (). ' Page '; Break Case ' 3 ': $this->next_page= ' next page '; $this->pre_page= ' previous page '; $this->first_page= ' home '; $this->last_page= ' last '; return $this->first_page (). $this->pre_page (). $this->next_page (). $this->last_page (); Break Case ' 4 ': $this->next_page= ' > '; $this->pre_page= ' < '; $this->first_page= ' << '; $this->last_page= ' >> '; return $this->first_page (). $this->pre_page (). $this->nowbar (). $this->next_page (). $this->last_page (); Break Case ' 5 ': return $this->pre_bar (). $this->pre_page (). $this->nowbar (). $this->next_page (). $this->next_bar (); Break } } /*----------------Private Function (private method)-----------------------------------------------------------*/ /** * Set URL header address * @param: String $url * @return Boolean */ Function _set_url ($url = "") { If (!empty ($url)) { //manual settings $this->url= $url; } else{ //Auto Get if (Empty ($_server[' query_string ')) { //query_string not present $this->url=$_server[' Request_uri ']. "?". $this->page_name. " ="; }else{ // if (stristr ($_server[' query_string '), $this->page_name. ' = ') { //address has page parameters $this->url=str_replace ($this->page_name. ' = '. $this->nowindex, ' ', $_server[' Request_uri ']); $last = $this->url[strlen ($this->url)-1]; if ($last = = '? ' | | $last = = ' & ') { $this->url.= $this->page_name. " ="; }else{ $this->url.= ' & '. $this->page_name. " ="; } }else{ // $this->url=$_server[' Request_uri ']. ' & '. $this->page_name. ' ='; }//end If }//end if }//end if } /** * Set Current page * */ function _set_nowindex ($nowindex) { if (empty ($nowindex)) { System acquisition if (Isset ($_get[$this->page_name])) { $this->nowindex=intval ($_get[$this->page_name]); } }else{ Manually set $this->nowindex=intval ($nowindex); } } /** * Returns the address value for the specified page * * @param int $pageno * @return String $url */ function _get_url ($pageno =1) { Return $this->url. $pageno. '. html '; } /** * Get pagination display text, e.g. _get_text (' 1 ') will return by default [1] * * @param String $str * @return String $url */ function _get_text ($STR) { Return $this->format_left. $str. $this->format_right; } /** * Get link address */ function _get_link ($url, $text, $style = ") { $style = (Empty ($style))? ": ' class=" '. $style. ' "; if ($this->is_ajax) { If you are using AJAX mode Return ' Ajax_action_name. ' ('. $url. ') ' > '. $text. '; }else{ Return '. $text. '; } } /** * Error Handling method */ Function error ($function, $errormsg) { Die (' Error in File '. __file__ ' , Function '. $function. ' () : '. $errormsg); } } ?> |