Skip to content

Instantly share code, notes, and snippets.

@stvkoch
Created February 5, 2009 10:13
Show Gist options
  • Save stvkoch/58637 to your computer and use it in GitHub Desktop.
Save stvkoch/58637 to your computer and use it in GitHub Desktop.
<?php
/**
* PAGINADOR DE QUALQUER TIPO DE DADOS
* Description: Retorna um html de paginação
*
* Ex: //..codigo que lista sua consulta
$records = $mymodel->find("SELECT * FROM mytable where name LIKE '%Pedro%' LIMIT " . ($resultsPerPag * $_REQUEST['p'] . " , $resultsPerPag");
showtablewithrecords( $records );
$totalsearch = $mymodel->count("SELECT * FROM mytable where name LIKE '%Pedro%'"
* echo paginator($totalsearch, $resultsPerPage, $urlmysearch, 7);
*
* @param $aCount
* - quantidade total de dados que a consulta retorna = COUNT(*)
* @param $resultsPerPage
* - Quantos registos por pagina esta definido em sua consulta
* @param $url
* - url que o paginador deve redirecionar para que voce possa tratar da pagina seguinte
* @param $elements
* - quantidade de elementos que o paginador deve tratar
* @return $html gerado com as paginas
*/
function paginator($aCount, $resultsPerPage, $url, $elements = 7){
$page = isset($_REQUEST['p']) ? $_REQUEST['p'] : 1;
$totalPages = round(($aCount / $resultsPerPage ) + 0.499, 0);
if($totalPages <=1)
return '';
$html = ($page > 1) ? link_to('Anterior', $url.'&amp;p='.($page-1), array('class'=>'prev') ) : '<span class="prev">'.'Anterior'.'</span>';
$ii = $page - round(($elements-0.49)/2);
if($ii<1){
$ii=1;
$runpages = ($totalPages>$elements)? $elements : $totalPages;
}else if( ($page + round(($elements-0.49)/2)) > $totalPages){
$ii = $totalPages - ($elements - 1);
$runpages = $totalPages;
}else{
$runpages = $page + round(($elements-0.49)/2);
$ii = $page - round(($elements-0.49)/2);
}
if($totalPages<=$elements){ $runpages = $totalPages; $ii=1; }
for($i=$ii;$i<=$runpages; $i++){
$html .= ($page==$i) ? "<span class=\"current\">$i</span>" : link_to($i, $url.'&amp;p='.$i );
}
if($page < $totalPages){
$p = $page+1;
$html .= link_to('próximo', $url.'&amp;p='.$p, array('class'=>'next') );
}else{
$html .= '<span class="next">'.'próximo'.'</span>';
}
return $html;
}
function link_to($name, $url=null, $html=array()){
$link = '<a href="'.htmlentities(url($url)).'"';
foreach($html as $k=>$v)
$link .= " $k=\"$v\"";
$link .= '>'.$name.'</a>';
return $link;
}
function url($options){
if(!is_array($options)){
if(strcmp($options, 'back')==0)
if(isset($_ENV["HTTP_REFERER"]))
return $_ENV["HTTP_REFERER"];
else
return 'java script:history.back()';
else
return $options;
}
return $url;
}
?>
<?php echo paginator( 120, 10, 'http://localhost/search.php?word=Pedro');?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment