Comunidad PHPeros
Lenguajes => PHP => Mensaje iniciado por: WuggyCakes en 17 de Abril de 2015, 05:12:31 am
-
Primero que todo, saludos.
Quería preguntarles acerca de algo que me ha estado inquietando últimamente: necesito hacer un sistema de paginación (no se como llamarlo, la verdad).
El objetivo es que después de consultar a la base de datos dos noticias ordenadas de más recientes a mas antiguas, en el fondo de la página me aparezcan opciones de que página quiero consultar. Algo así como:
Noticia uno
Noticia dos
Pagina: 1, 2, 3, 4, 5, 6, 7, 8, >>
Que al pasar de página, las noticias sigan su orden de más recientes a más antiguas justo donde se había quedado en la página anterior.
No se si me explico con claridad, pero algo así quiero lograr.
Gracias.
-
Ten en cuenta que LIMIT de SQL permite pasar dos parámetros que sería el comienzo y final para definir un segmento de búsqueda.
Ahí tienes la clave.
-
Hay muchas maneras de "paginizar". A mi me pareció simple utilizar <select> y preparé un código más o menos así...
<?php
// $actPag es la página actual
// $maxPag es el máximo de páginas
// Inicio de la tabla
echo "<table cellspacing=\"0px\" style=\"width: 100%; max-width:1000px; margin: auto; padding: 2 0;\">\n";
echo "\t<tr>\n";
echo "\t\t<td style=\"text-align:right;\">\n";
if($actPag > 1)
{
echo "\t\t\t<button type=\"button\" onclick=\"location = 's_verpaginas.php'\"><<</button>\n"; // Botón para volver a la primer página
echo "\t\t\t<button type=\"button\" onclick=\"location = 's_verpaginas.php?pagina="; // Botón para ir a la página anterior
echo $actPag-1; // Botón para ir a la página anterior
echo "'\"><</button>\n"; // Botón para ir a la página anterior
}
// Este sería un bucle con el menú de todas las páginas (desde el 1 hasta $maxPag) en <select> y <option>.
// Al pinchar en una opción, te redirecciona mediante javascript a la nueva página.
echo "\t\t\t<select onchange=\"location = this.options[this.options.selectedIndex].value\">\n";
for($i=1;$i<=$maxPag;$i++)
{
echo "\t\t\t\t<option value=\"s_verpaginas.php?pagina={$i}\"";
if($i == $actPag) echo " selected=\"selected\""; // Selecciona la página actual
echo ">{$i}</option>\n";
}
echo "\t\t\t</select>\n";
if($actPag < $maxPag)
{
echo "\t\t\t<button type=\"button\" onclick=\"location = 's_verpaginas.php?pagina="; // Botón para ir a la página siguiente
echo $actPag+1; // Botón para ir a la página siguiente
echo "'\">></button>\n"; // Botón para ir a la página siguiente
echo "\t\t\t<button type=\"button\" onclick=\"location = 's_verpaginas.php?pagina={$maxPag}'\">>></button>\n"; // Botón para ir a la última página ($maxPag)
}
// Cierre de la tabla
echo "\t\t</td>\n";
echo "\t</tr>\n";
echo "</table>\n";
?>
Para mostrar "dos noticias ordenadas de mas recientes a mas antiguas" podrías hacer una consulta así:
SELECT * FROM `noticias` ORDER BY `id` DESC LIMIT 2;
SELECT * - seleccionar todas las columnas
FROM `noticias` - de la tabla 'noticias'
ORDER BY `id` - ordenadas por 'id'
DESC - de manera descendente (es decir, ordenará las ID empezando por la última)
LIMIT 2 - con límite de 2 filas
Respecto a "paginizar", es algo muy complicado y hay muchas formas de hacerlo. Justamente hoy estaba preparando un menú con páginas en PHP. Si estás interesado puedo publicar aquí mismo el código completo.