* *******************************************************************************/ if(!class_exists('clogica_pagination')){ class clogica_pagination{ private $rows=15; //The rows per page. private $table_rows_count; //The total rows to show. private $pages_count; //The pages number to generate. private $current_page=1; //The number of the current page displayed. private $start=0; //The start of the mysql limit keyword. private $printed_pages=7; //Number of pages to display. private $parameter='page_num'; //The pgination paramerter name. private $url_rewrite=''; //The URL rewrite structure. private $data_source; //The MySQL Table or Tables used. private $filter; //The MySQL Where clouse. private $current_parameters; //The existing query string parameters private $prev_page; //The previous page. private $next_page; //The next page private $run_count=0; //Times that the funtion run() invoked. private $show_pages_number=true; //Pages number box status. private $show_prev_next=true; //Showing pervious and next page buttons status. private $show_first_last=true; //Showing first and last page buttons status. private $pages_number_text= "of"; //Set text of pages number public function __construct($data_source='',$filter='',$rows=15,$parameter='page_num') { $this->data_source=$data_source; $this->set_filter($filter); $this->rows=$rows; $this->parameter= $parameter; } //------------------------------------------------------------------------ private function run_code() { global $wpdb; if($this->run_count == 0) { if($this->data_source== '') { echo 'You must set the Data Source using the function set_data_source($data_source)'; exit(0); } $sql=" select count(*) as cnt from {$this->data_source} {$this->filter} "; $result=$wpdb->get_row($sql); $this->table_rows_count = intval($result->cnt); $this->pages_count = intval($this->table_rows_count/$this->rows); if($this->table_rows_count%$this->rows !=0) $this->pages_count=$this->pages_count+1; if($this->pages_count ==0) $this->pages_count=1; if(array_key_exists($this->parameter,$_GET)) $this->current_page = intval($_GET[$this->parameter]); else $this->current_page =1; if($this->current_page<1) $this->current_page=1; else if($this->current_page > $this->pages_count) $this->current_page=$this->pages_count; $this->current_parameters = $this->get_current_parameters($this->parameter); $this->prev_page= $this->current_page -1; $this->next_page= $this->current_page +1; $this->start = (($this->current_page - 1) * $this->rows); } $this->run_count ++; } //------------------------------------------------------------------------ public function run() { $this->run_code(); $this->pagination_header_html(); if($this->current_page > 1) { if($this->show_first_last) echo $this->get_first_page(1); if($this->show_prev_next) echo $this->get_prev_page($this->prev_page ); } $stop=0; $half_pages=""; $frompage=""; $topage =""; if($this->printed_pages>1){ $half_pages= intval($this->printed_pages/2); if($this->printed_pages%$half_pages ==0) $half_pages--; $frompage=($this->current_page - $half_pages ); $topage = ($this->current_page + $this->printed_pages); } if($this->printed_pages==1) { $frompage = $this->current_page; $topage = $this->current_page; } if($this->printed_pages==3) { $frompage = $this->current_page -1; $topage = $this->current_page + 1 ; } if($this->current_page > ( $this->pages_count - ($this->printed_pages - $half_pages ) )) { $topage = $this->pages_count ; $frompage= ( $this->pages_count - $this->printed_pages +1 ); } for($i=$frompage;$i<=$topage;$i++) { if($i>0 && $i<=$this->pages_count && $this->pages_count>1) { if($i==$this->current_page) echo $this->get_current_page_html($i); else echo $this->get_page_html($i,$i); $stop++; if($stop >= $this->printed_pages) break; } } if($this->pages_count>1){ echo $this->get_pages_number_html(); } if($this->current_page >= 1 && $this->pages_count>1 && $this->current_page< $this->pages_count) { if($this->show_prev_next) echo $this->get_next_page($this->next_page); if($this->show_first_last) echo $this->get_last_page($this->pages_count); } $this->pagination_footer_html(); } //------------------------------------------------------------------------ private function get_page_html($page,$name) { return '' . $name . ''; } //------------------------------------------------------------------------ private function get_first_page($page) { return ''; } //------------------------------------------------------------------------ private function get_prev_page($page) { return ''; } //------------------------------------------------------------------------ private function get_last_page($page) { return ''; } //------------------------------------------------------------------------ private function get_next_page($page) { return ''; } //------------------------------------------------------------------------ private function get_current_page_html($name) { return '' . $name . ''; } //------------------------------------------------------------------------ private function pagination_header_html() { echo '
'; } //------------------------------------------------------------------------ private function pagination_footer_html() { echo '
'; } //------------------------------------------------------------------------ private function random_id() { srand ((double) microtime( )*1000000000); return rand(); } //------------------------------------------------------------------------ private function get_pages_number_html() { if($this->show_pages_number) echo '' . $this->current_page . ' ' . $this->pages_number_text . ' ' . $this->pages_count . ''; } //------------------------------------------------------------------------ public function get_page_url($page) { if($this->url_rewrite == '') { if($this->current_parameters =="") return "?" . $this->parameter . "=" . $page; else return $this->current_parameters . "&" . $this->parameter . "=" . $page; }else { return str_replace('{pagination}',$page, $this->url_rewrite); } } //------------------------------------------------------------------------ private function get_page_url_parameter() { if($this->current_parameters =="") return "?" . $this->parameter . "="; else return $this->current_parameters . "&" . $this->parameter . "="; } //------------------------------------------------------------------------ private function get_current_parameters($remove_parameter="") { if($_SERVER['QUERY_STRING']!='') { $qry = '?' . urldecode($_SERVER['QUERY_STRING']); if($remove_parameter!='') { if(array_key_exists($remove_parameter,$_GET)) { $string_remove = '&' . $remove_parameter . "=" . $_GET[$remove_parameter]; $qry=str_replace($string_remove,"",$qry); $string_remove = '?' . $remove_parameter . "=" . $_GET[$remove_parameter]; $qry=str_replace($string_remove,"",$qry); } } return $qry; }else { return ""; } } //------------------------------------------------------------------------ public function get_sql_limit() { $this->run_code(); return " limit {$this->start},{$this->rows} "; } //------------------------------------------------------------------------ public function get_rows() { return $this->rows; } //------------------------------------------------------------------------ public function set_rows($rows) { if(intval($rows)>0) { $this->rows=$rows; $this->run_count=0; } } //------------------------------------------------------------------------ public function get_total_records() { return $this->table_rows_count; } //------------------------------------------------------------------------ public function get_printed_pages() { return $this->printed_pages; } //------------------------------------------------------------------------ public function set_printed_pages($printed_pages) { if(intval($printed_pages)>0) { $this->printed_pages=$printed_pages; $this->run_count=0; } } //------------------------------------------------------------------------ public function get_parameter_name() { return $this->parameter; } //------------------------------------------------------------------------ public function set_parameter_name($parameter) { $this->parameter=$parameter; $this->run_count=0; } //------------------------------------------------------------------------ public function get_url_rewrite() { return $this->url_rewrite; } //------------------------------------------------------------------------ public function set_url_rewrite($url_rewrite) { $this->url_rewrite=$url_rewrite; $this->run_count=0; } //------------------------------------------------------------------------ public function get_data_source() { return $this->data_source; } //------------------------------------------------------------------------ public function set_data_source($data_source) { $this->data_source=$data_source; $this->run_count=0; } //------------------------------------------------------------------------ public function get_filter() { return $this->filter; } //------------------------------------------------------------------------ public function set_filter($filter) { if($filter!='') $this->filter= $filter; $this->run_count=0; } //------------------------------------------------------------------------ //------------------------------------------------------------------------ public function get_pages_number_text() { return $this->pages_number_text; } //------------------------------------------------------------------------ public function set_pages_number_text($pages_number_text) { $this->pages_number_text=$pages_number_text; $this->run_count=0; } //------------------------------------------------------------------------ public function show_pages_number($value) { if($value) $this->show_pages_number = true; else $this->show_pages_number = false; $this->run_count=0; } //------------------------------------------------------------------------ public function can_show_pages_number() { return $this->show_pages_number; } //------------------------------------------------------------------------ public function show_prev_next($value) { if($value) $this->show_prev_next = true; else $this->show_prev_next = false; $this->run_count=0; } //------------------------------------------------------------------------ public function can_show_prev_next() { return $this->show_prev_next; } //------------------------------------------------------------------------ public function show_first_last($value) { if($value) $this->show_first_last = true; else $this->show_first_last = false; $this->run_count=0; } //------------------------------------------------------------------------ public function can_show_first_last() { return $this->show_first_last; } //------------------------------------------------------------------------ }}