| Despabilando la MonoNeurona::Internet es de todos [Inicio] [Regresar] |
|
WWW \ Paginación con PHP Este artículo ha sido consultado en 1,345 ocasiones. Cuando una tabla tiene más de 50 registros comienza a volverse molesta, pues tarda mucho en cargarse y desplegarse, además las páginas comienzan a volverse kilométricas. Esta situación es un costoso problema, pues el servidor tiene una gran carga de trabajo ante una consulta cualquiera. Cuando nuestros datos se vuelven muy abundantes ha llegado el momento de paginar, es decir, de mostrar el cóntenido de una consulta en una página navegable al estilo de Google. Las librerías PEAR de PHP cuentan con la clase Pager que nos ayuda en esta tarea. (Si usted está en Debian asegúrese que el paquete php4-pear está instalado). Note que en la línea 48 cargamos las opciones para conectarnos, si usted está usando MySQL cambie pgsql: por mysql:. En la línea 54 realizamos la conexión con PEAR. En la línea 77 obtenemos el array $data, que contiene todos los detalles para la paginación. 1:<? 2:/* 3:* Paginacion de una tabla con PEAR 4:* 5:* Manuel Montoya 2005 GPL manuel@mononeurona.org 6:* 7:* www.MonoNeurona.org 8:* 9:*/ 10: 11:require_once 'DB.php'; // La conexion PEAR a la BD 12: 13:require_once 'DB/Pager.php'; // La clase que realiza la paginacion 14: 15:$SELF = $_SERVER['PHP_SELF']; // La pagina actual 16: 17:?> 18: 19:<html> 20:<head><title>Ejemplo Paginacion</title></head> 21:<style type="text/css"> 22:img { 23: border:0; 24:} 25:a { 26: color: #2d508a; 27: font-size: 12px; 28: font-family: Verdana, Arial, Helvetica, sans-serif; 29: text-decoration:none; 30: text-align:left; 31:} 32: 33:a:hover { 34: color: #f29503; 35: font-size: 12px; 36: font-family: Verdana, Arial, Helvetica, sans-serif; 37:} 38:</style> 39:<body> 40:<? 41: 42:$DATABASE = "DBPROYECTOS"; 43:$DBUSER = "postgres"; 44:$DBPASSWORD = "Mexik0L0ReS33"; 45:$DBHOST = "localhost"; 46:$DBPORT = 5432; 47: 48:$dsn = "pgsql://$DBUSER:$DBPASSWORD@$DBHOST/$DATABASE"; 49: $options = array( 50: 'debug' => 2, 51: 'portability' => DB_PORTABILITY_ALL, 52: ); 53: 54:$conn =& DB::connect($dsn, $options); 55: 56:if (PEAR::isError($conn)) 57: die($conn->getMessage()); 58: 59: 60:$sql="SELECT id, nombre, responsable FROM proyectos ORDER BY id"; 61: 62:// La variable $_GET['from'] existe, no esta vacia y es un numero ? 63:if (isset($_GET['from']) && $_GET['from'] != '' && is_numeric($_GET['from'])) 64: $from = $_GET['from']; 65:else 66: $from = 0; 67: 68:$limit = 10; // Despliega 10 paginas al estilo de Google 69: 70:$maxpages = 10; // El numero total de registros en el query 71: 72:$Q="SELECT count(*) FROM proyectos"; //Cuento los registros 73: 74:$nrows =& $conn->getRow($Q); 75: 76:// La clase pager que me devuelve el array $data 77:$data = DB_Pager::getData($from, $limit, $nrows[0], $maxpages); 78: 79:echo '<table align="center" width="70%">'; 80: 81:echo '<tr><td colspan="3"><p class="negrita"> 82:Pagina '. $data['current'] . ' de ' . $data['numpages'] . '</p></td></tr>'; 83: 84:echo '<tr><td colspan="3" align="center">'; 85: 86: 87:// A menos que sea la primera pagina, muestra la liga de "<< Pagina Previa" 88:if ( $data['current'] != $data['firstpage'] ) 89: echo '<a href="'. "$SELF?from=" . $data['prev'] . '">< < Página Previa</a>'; 90: 91: 92:echo " "; 93: 94:// A menos que sea la ultima pagina, muestra la liga de "Siguiente>>" 95:if ( $data['current'] != $data['lastpage'] ) 96: echo '<a href="'. "$SELF?from=" . $data['next'] . '">Página Siguiente >></a>'; 97: 98: 99:echo '</td></tr>'; 100: 101:// Ve por 10 registros usando la funcion de PEAR::DB limitQuery 102:$res = $conn->limitQuery($sql, $from, $limit); // Display the rows 103: 104: 105:$color1 = 'cccccc'; // Gris 106:$color2 = 'fff'; // Blanco 107:$row_count = 0; 108: 109://Pinto los registros 110:while ($row = $res->fetchrow()) { 111: 112: $bgcolor = ($row_count % 2) ? $color1 : $color2; // color del renglon 113: 114: print "<tr style=\"background-color:#$bgcolor;\"> 115: <td class=\"boton\"><a href=\"editar.php?id=". $row[0]. "\"> 116: <img src=\"images/editar.png\" title=\"Editar\" alt=\"Editar\"></a></td> 117: <td class=\"presenta\">". $row[1]. "</td> 118: <td class=\"boton\"><a href=\"borrar.php?id=". $row[0]. "\"> 119: <img src=\"images/borrar.png\" title=\"Borrar\" alt=\"Borrar\";></a> 120: </td></tr>\n"; 121: 122: $row_count++; 123:} 124: 125: 126:echo '<tr><td colspan="3" style="text-align:center;"> 127:<span class="pequena">' . $data['numrows'] . ' Registros encontrados '; 128: 129:echo 'Desplegando '. $data['limit'] . ' registros por página</span></td></tr>'; 130: 131:echo "<tr><td colspan=\"3\" style=\"text-align:center;\"> 132:<span class=\"pequena\">"; // Ligas directas a las paginas 133: 134: 135:foreach ($data['pages'] as $page => $start_row) { 136: echo "[ <a href='$SELF?from=$start_row'>$page</a> ] "; 137:} 138: 139:echo '</td></tr>'; 140:?> 141: 142:<tr><td colspan="3"><br><br></td></tr> 143: 144:<tr><td> 145:<form method="post" name="forma" action="menu.php"> 146:<input type="hidden" name="pagina" value="<?= $pagina; ?>"> 147:<input type="hidden" name="sec" value="proyect2"> 148:<input class="boton" type="submit" value="Nuevo registro"> 149:</form> 150:</td><td></td><td style="text-align:right;"> 151:</form> 152: 153:</td></tr></table> 154: 155:</body> 156:</html> El resultado del código luce así:
Y eso es todo, ¡hasta la próxima entrega! Última actualización: 2007-04-29 10:56:59-05 |
| Este trabajo está licenciado bajo la MonoNeurona Commons License. 2002-2008 © :: Colectivo MonoNeurona.org :: |