Re: [PHP-ES] Problemas con paginador

[email protected] (Luis Vega) Sun, 1 Nov 2015 22:55:35 -0300
Newsgroups php.general.es
Message-ID <CAKPF32BW6sJP9r+fyQYO2V2-h+0g4P_027xe66ZTDnFKfxTuPQ@mail.gmail.com>
--001a113ce2a0e65e7e0523851334
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

El 1 de noviembre de 2015, 9:25 p. m., Alexis Saucedo<
[email protected]> escribi=C3=B3:

> Buenas noches a todos! les traigo una consulta que la verdad ya agote
> recursos para resolverla, tengo un paginador que muestra ejemplo:
>
> <---anterior 1234 siguiente --->
>
> el tema es que estoy buscando la forma de que no me muestre todos los
> numeros de paginas si que los valla recorriendo, cuando tengo muchos
> datos veo algo mas o menos asi:
>
> <---anterior 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
> 23 24 25 26 27 28 siguiente --->
>
> y cuando hay mas de 500 datos es infernal, el codigo que estoy usando es
> este:
>
> $query =3D "SELECT * FROM articulos";
> $result =3D mysqli_query($mysqli, $query);
> // Count the total record
> $total_records =3D mysqli_num_rows($result);
> //Using ceil function to divide the total records on per page
> $total_pages =3D ceil($total_records / $per_page);
>
> for ($i=3D1; $i<=3D$total_pages; $i++) {
> if($i=3D=3D$_GET['page']){
> $clase =3D 'active';
> }else{
> $clase =3D '';
> }
> //numeros de paginas
> $paginas[$i] =3D array('numero'=3D>$i,'clase'=3D>$clase);
> };
> //array_push($articulos, 'clase', $clase);
> if($total_pages=3D=3D$_GET['page']){
> $siguiente =3D $total_pages;
> }else{
> $siguiente =3D $_GET['page']+1;
> }
> if($_GET['page']=3D=3D'1'){
> $anterior =3D '1';
> }else{
> $anterior =3D $_GET['page']-1;
> }
>
> Alguien tiene idea como lo podria hacer?.
>
> Saludos y muchisimas gracias.
>
> --
> PHP Spanish Localization Talk Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
Utiliza esta clase:

<?php

// This is a helper class to make paginating records easy.
class Pagination {
   public $current_page;
   public $per_page;
   public $total_count;

   public function __construct($page=3D1, $per_page=3D20, $total_count=3D0)=
{
  $this->current_page =3D (int)$page;
         $this->per_page =3D (int)$per_page;
         $this->total_count =3D (int)$total_count;
   }

   public function offset() {
         // Assuming 20 items per page:
         // page 1 has an offset of 0    (1-1) * 20
         // page 2 has an offset of 20   (2-1) * 20
         //   in other words, page 2 starts with item 21
         return ($this->current_page - 1) * $this->per_page;
   }

   public function total_pages() {
         return ceil($this->total_count/$this->per_page);
  }
   public function previous_page() {
         return $this->current_page - 1;
   }

   public function next_page() {
         return $this->current_page + 1;
   }

   public function has_previous_page() {
        return $this->previous_page() >=3D 1 ? true : false;
   }

   public function has_next_page() {
return $this->next_page() <=3D $this->total_pages() ? true : false;
  }
}

?>



Ejemplo:

<?
require_once('paginator.inc.php');

$page =3D !empty($_GET['page']) ? (int)$_GET['page'] : 1;
$per_page =3D 9; // Registros por pagina

$sql =3D "SELECT * FROM articulos";
$res =3D @mysql_query($sql,$dbh);
$total_count =3D @mysql_num_rows($res);
$pagination =3D new Pagination($page, $per_page, $total_count);

$sql .=3D " LIMIT ".$per_page;
$sql .=3D " OFFSET ".$pagination->offset();

$res =3D @mysql_query($sql,$dbh);

if(@mysql_num_rows($res) > 0){
while($row =3D mysql_fetch_array($res)){
        // Mostrar contenido
        echo $row['nombre'];
        }
}

?>


Mostrar paginador

<?php
if(@mysql_num_rows($res) > 0){
  if($pagination->total_pages() > 1) {
          echo "<div class=3D\"paginador\">";

          if($pagination->has_previous_page()) {
                echo "<a
href=3D'index.php?page=3D".$pagination->previous_page()."'>Anterior</a>";
          }

          for($i=3D1; $i <=3D $pagination->total_pages(); $i++) {
                if($i =3D=3D $page) {
echo "<strong>".$i."</strong>";
} else if($i =3D=3D $page-1 || $i =3D=3D $page-2 || $i =3D=3D $page-3 || $i=
 =3D=3D $page+1
|| $i =3D=3D $page+2 || $i =3D=3D $page+3){
echo "<a href=3D'".$paramPath."destacadas/".$i."'>".$i."</a>";
}
  }

          if($pagination->has_next_page()) {
echo "<a href=3D'index.php?page=3D".$pagination->next_page()."'>Siguiente</=
a> ";
}
echo "</div>";
    }
}

?>


Saludos



--=20
Luis Vega Mart=C3=ADnez
Dise=C3=B1o y Desarrollo Web
Celular: +(56 9) 66787687
Web: www.crea7ive.cl

--001a113ce2a0e65e7e0523851334--