Revision: 6419
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 20, 2008 13:20 by mattkenefick
Initial Code
<?php /************************************** seesaw associates | http://seesaw.net client: general file: class.paging.php description: handles mysql paging Copyright (C) 2008 Matt Kenefick(.com) **************************************/ class paging{ var $sql_results; var $sql_query; var $display_offset; var $display_limit; var $display_limit_URI; var $display_currentpage; var $display_totalpages; var $alt_content_count; var $display_offset_var; var $display_limit_var; var $display_mid_offset; var $display_link_first; var $display_link_prev; var $display_link_next; var $display_link_last; var $page_filename; var $page_uri; var $content; var $content_type; var $content_count; ## CONSTRUCTOR function paging($offsetVar='offset',$limit=10,$midOffset=2){ $this->display_offset = isset($_REQUEST[$offsetVar])?$_REQUEST[$offsetVar]:0; $this->display_limit = is_numeric($limit)?$limit:10; $this->display_mid_offset = $midOffset; $this->display_offset_var = $offsetVar; $this->display_currentpage = ceil($this->display_offset / $this->display_limit); } ## HANDLE DATA function setContent($content){ if( is_array($content) ) $this->content_type = 'array'; $this->content = $content; $this->private_contentDetails(); $this->getLinks(); } function private_contentDetails(){ if( $this->content_type == 'array' ) $this->content_count = count($this->content); } function getContent(){ $returnAry = array(); for( $i=$this->display_offset; $i< min( $this->content_count, $this->display_offset+$this->display_limit ); ++$i ) array_push($returnAry,$this->content[$i]); return $returnAry; } ## LINKS TO NAVIGATE function getLinks(){ $this->getNextLink(''); $this->getFirstLink(''); $this->getLastLink(''); $this->getPrevLink(''); } function getNext(){ return $this->display_link_next; } function getPrev(){ return $this->display_link_prev; } function getFirst(){ return $this->display_link_first; } function getLast(){ return $this->display_link_last; } function getNextLink($caption){ // Check if we're counting content or the alternate user provided count if( $this->alt_content_count ) $count = $this->alt_content_count; else $count = $this->content_count; if( $this->display_offset+$this->display_limit-$count >=0 ){ $this->display_link_next = $this->display_offset; }else{ $this->display_link_next = min( $count-1, $this->display_offset+$this->display_limit ); } return $this->buildLink( $this->buildNewURI( $this->display_link_next), $caption ); } function getPrevLink($caption){ $this->display_link_prev = max( 0, $this->display_offset-$this->display_limit ); return $this->buildLink( $this->buildNewURI( $this->display_link_prev), $caption ); } function getFirstLink($caption){ $this->display_link_first = 0; return $this->buildLink( $this->buildNewURI( $this->display_link_first), $caption ); } function getLastLink($caption){ $this->display_link_last = $this->content_count-$this->display_limit; return $this->buildLink( $this->buildNewURI( $this->display_link_last), $caption ); } ## NUMBERS function getPageCount(){ if( $this->alt_content_count ) $count = $this->alt_content_count; else $count = $this->content_count; $this->display_totalpages = ceil( $count / $this->display_limit ); return $this->display_totalpages; } function getPageNumbers(){ // define variables $midOffset = $this->display_mid_offset; $firstLink = $this->display_link_first; $pageCount = $this->getPageCount(); $thisPage = $this->display_currentpage; $limit = $this->display_limit; $displayed = $midOffset*2+1; $returnAry = array(); // dots $returnAry['afterdot'] = ''; $returnAry['beforedot'] = ''; // if two times and center the number is less than all the pages together if( ($midOffset*2+1) < $pageCount ){ $min = max($firstLink,$thisPage-$midOffset); $max = min($pageCount,$thisPage+$midOffset+1); $total = $max-$min; // this keeps x amount of pages displayed even if // you're not in mid cause of page 1 or 2 if($total<$displayed){ if($min==0){ $max+=$displayed-$total; } if($max==$pageCount){ $min-=$displayed-$total; } } }else{ # Just output a set of numbers $min = 0; $max = $pageCount; } // run pages, check for current page and name it for($i=$min;$i<$max;++$i){ $cp = 'no'; if($thisPage==$i) $cp = 'yes'; if($max!=$pageCount) $returnAry['afterdot'] = '...'; if($min>0) $returnAry['beforedot'] = '...'; array_push($returnAry, array( 'currentPage' => $cp, 'pageNumber' => ($i+1), 'pageLink' => $this->buildLink( $this->buildNewURI( ($i*$limit) ), ($i+1) ) ) ); } return $returnAry; } function makePageNumbers($format, $pages,$boldCurrent=true,$separator=' '){ $retPages = ''; // make actual page numbers foreach($pages as $key => $value): if(is_numeric($key)) $retPages .= ('yes'==$value['currentPage'] && $boldCurrent)?'<b>'.$value['pageLink'] .'</b>'.$separator:$value['pageLink'].$separator; endforeach; $format = str_replace( array('{beforedot}', '{afterdot}', '{pages}', '{separator}'), array( $pages['beforedot'], $pages['afterdot'], $retPages), $format); return $format; } ## CHECKS function isFirstPage(){ if($this->display_currentpage==0) return true; return false; } function isLastPage(){ // add one because basis is 0, not 1 if($this->display_currentpage+1==$this->getPageCount()) return true; return false; } ## FUNCTIONS function getPageName(){ $fileName = explode('/',$_SERVER['REQUEST_URI']); $fileName = $fileName[count($fileName)-1]; if(strpos($fileName,'?')>0) { $fileName = explode('?',$fileName); $fileName = $fileName[0]; } return $fileName; } function getCleanURI(){ $URI = $_SERVER['REQUEST_URI']; if(strpos($URI,'?')>0){ $URI = explode('?',$URI); $URI = $URI[1]; $URI = preg_replace('/\b'.$this->display_offset_var.'\b[=0-9&]{2,20}/','',$URI); //$URI = preg_replace('/\b'.$this->display_limit_var.'\b[=0-9&]{2,20}/','',$URI); return $URI; } return false; } function buildNewURI($offset){ $newFile = $this->getPageName() . '?' . $this->getCleanURI(); $lastChar = substr($newFile,strlen($newFile)-1,1); if( $lastChar != '&' && $lastChar != '?' ) $newFile.='&'; $newFile .= $this->display_offset_var.'='.$offset.'&'; //$newFile .= $this->display_limit_var.'='.$limit.'&'; return $newFile; } function buildLink( $href, $caption, $target=NULL ){ if( $target != NULL ) $target = ' target="'.$target.'"'; return '<a href="'.$href.'"'.$target.'>'.$caption.'</a>'; } function encodeURI($str){ $salt = 'falaful'; $str = strrev($salt.$str); return base64_encode($str); } function decodeURI($str){ $salt = 'falaful'; $str = strrev( base64_decode($str) ); $str = substr( $str, strlen($salt), strlen($str) ); return $str; } ############## # # These functions are for inputting a query for this # class to execute. The other functions will grab all # x amount of rows then truncate it. These functions will # only limit to whatever amount. This improves performance. # Reason is so you dont grab 1,000,000 rows when you want 3. # ############## function runWQuery($db, $statement, $table, $where=''){ // get total rows $db->query( 'SELECT COUNT(*) AS count FROM '. $table . ' ' . $where ); $db->movenext(); $this->alt_content_count = $db->col['count']; // add limit to query $where .= ' LIMIT ' . $this->display_offset .', '.$this->display_limit; // save query $this->sql_query = $statement . ' FROM ' . $table .' '. $where; // print query //echo $this->sql_query; // run query $db->query( $this->sql_query ); $this->sql_results = array(); // save results while($db->movenext()){ array_push($this->sql_results , $db->col); } return $this->runQueryActions(); } function runQueryActions(){ $this->setContent( $this->sql_results ); $pages = $this->getPageNumbers(); // make actual page numbers $retPages = $this->makePageNumbers( '{beforedot} {pages} {afterdot}', $pages, true, ' ' ); // get new display return array( 'content' => $this->sql_results, 'pages' => $retPages ); } } ?>
Initial URL
Initial Description
Paging class. Details on use to come later.
Initial Title
PHP Class: Paging
Initial Tags
class, php
Initial Language
PHP