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--