Skip to content

Instantly share code, notes, and snippets.

@SrChach
Last active April 15, 2019 17:49
Show Gist options
  • Save SrChach/cb33c652810df64167ded863a16ce6a0 to your computer and use it in GitHub Desktop.
Save SrChach/cb33c652810df64167ded863a16ce6a0 to your computer and use it in GitHub Desktop.
Función de paginador para PHP
function botoneador($total_registros, $registros_por_pagina, $primer_registro){
$registros_por_pagina = is_numeric($registros_por_pagina) && $registros_por_pagina != 0 ? $registros_por_pagina : 10;
$total_paginas = ceil($total_registros / $registros_por_pagina);
$primer_registro = is_numeric($primer_registro) ? number_format($primer_registro) : 0;
if($primer_registro < 0 || $primer_registro > $total_registros)
$primer_registro = 0;
$pagina_actual = floor($primer_registro / $registros_por_pagina) + 1;
if($pagina_actual > $total_paginas)
$pagina_actual = $total_paginas;
$buttons = [];
// Marcamos los botones de 'atrás'
if($pagina_actual != 1)
$buttons['<<'] = ($pagina_actual - 2) * $registros_por_pagina . '-' . $registros_por_pagina;
if($total_paginas > 6){
$restantes = $total_paginas - $pagina_actual;
$contador = $total_paginas - 3;
// Falta el caso en el que está al centro, tienes en las primeras y en la súltimas, pero no al centro...
if( $restantes > 3 && $pagina_actual > 3 ){
// Caso central, ni primeras ni últimas páginas
$buttons[1] = "0-$registros_por_pagina";
$buttons[2] = '...';
for($i = $pagina_actual - 1; $i < $pagina_actual + 2; $i++){
$buttons[$i] = ($i - 1) * $registros_por_pagina . '-' . $registros_por_pagina;
}
$buttons[$total_paginas - 1] = '...';
$buttons[$total_paginas] = ($total_paginas - 1) * $registros_por_pagina . '-' . $registros_por_pagina;
} else if ($pagina_actual <= 3) {
// Caso primeras tres páginas
for ($i = 0; $i <= 3; $i++)
$buttons[$i + 1] = ($i) * $registros_por_pagina . "-" . $registros_por_pagina;
$buttons[$total_paginas - 1] = '...';
$buttons[$total_paginas] = $registros_por_pagina * ($total_paginas - 1) . '-' . $registros_por_pagina;
} else /*if( $restantes > 3 )*/{
// Caso cerca del final
$buttons[1] = "0-$registros_por_pagina";
$buttons[2] = '...';
while ($contador <= $total_paginas) {
$buttons[$contador] = ($contador - 1) * $registros_por_pagina . '-' . $registros_por_pagina;
$contador++;
}
}
} else {
// si son menos de 6 botones, mostramos todos
for($i = 0; $i < $total_paginas; $i++)
$buttons[$i +1] = $i * $registros_por_pagina . '-' . $registros_por_pagina;
}
// Marcamos los botones de "adelante"
if($pagina_actual < $total_paginas)
$buttons['>>'] = ($pagina_actual) * $registros_por_pagina . '-' . $registros_por_pagina;
// marcamos el botón actual
$buttons[$pagina_actual] = 'current';
$ultimo_registro = ($primer_registro + $registros_por_pagina) <= $total_registros ? $primer_registro + $registros_por_pagina : $total_registros;
$formato = ($primer_registro + 1) . "-$ultimo_registro";
// $formato_recomendado = $primer_registro - ($primer_registro % $registros_por_pagina) . '-' . $registros_por_pagina;
return ['buttons' => $buttons, 'display' => $formato, 'primer_registro' => $primer_registro, 'total' => $total_registros];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment