Paginando una noticia
16 de febrero de 2007 Autor: cmacias Archivado en Dreamweaver, PHP/MySQL, TutorialesEs frecuente en la gran mayoría de los blog, tener un paginador que te permite acceder a las noticias anterior y siguiente. En este tutorial aprenderemos (o por lo menos lo intentaremos) ver como conseguir ese efecto de la forma menos traumática.
Para empezar, partiremos de la base de una tabla en nuestra base de datos llamada hipotéticamente “noticias”. Esta tabla podría tener los siguientes campos: id, titulo, texto y fecha.
CREATE TABLE `noticia` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`titulo` VARCHAR( 150 ) NOT NULL ,
`texto` TEXT NOT NULL ,
`fecha` DATETIME NOT NULL ,
FULLTEXT (`texto`)
)
Ahora desde dreamweaver, creamos un recordset cuya consulta podría ser similar a esta
SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha WHERE noticia.id = idPara completar este recordset, creamos una variable donde el nombre es “id”, el tipo “numérico”, el valor predeterminado “1″ y el valor de tiempo de ejecución “$_GET['id']”
Esto nos daría un código más o menos parecido a esto.
$id_rsNoticia = "1";
if (isset($_GET['id'])) {
$id_rsNoticia = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}
mysql_select_db($database_conn, $conn);
$query_rsNoticia = "SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha WHERE noticia.id = %s", GetSQLValueString($id_rsNoticia, "int"));
$rsNoticia = mysql_query($query_rsNoticia, $conn) or die(mysql_error());
$row_rsNoticia = mysql_fetch_assoc($rsNoticia);
$totalRows_rsNoticia = mysql_num_rows($rsNoticia);
Bien, tal y como tenemos nuestro recordset, este nos mostraría en pantalla el registro cuyo “id” le pasemos por url, de la manera “noticia.php?id=1″. Lo que necesitamos ahora es averiguar cuales son los registros anteriores y siguientes, basandonos en un orden lógico de fecha. Para eso, vamos a crear dentro de nuestra consulta 2 subconsultas nuevas.
Nos centramos entonces en
SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha" que es donde realizaremos las subconsultas.
SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha,
(SELECT anterior.id FROM noticia AS anterior
WHERE anterior.fecha
(SELECT siguiente.id FROM noticia AS siguiente
WHERE siguiente.fecha>noticia.fecha
ORDER BY siguiente.fecha ASC LIMIT 0,1) AS siguiente Esto traducido quiere decir que aparte de seleccionar los campos anteriormente citados, seleccionamos el id de la tabla “noticia” cuyo alias es “anterior”, donde la fecha será anterior a la de la consulta principal. Este registro lo ordenamos por fecha Descendente y limitamos el número de registro a devolver a uno. A esta subconsulta la llamaremos “anterior”.
Lo mismo para la siguiente subconsulta. Seleccionamos el id de la tabla “noticia” cuyo alias es “siguiente”, donde la fecha será posterior a la de la consulta principal. Este registro lo ordenamos por fecha Ascendente y limitamos el número de registro a devolver a uno. A esta subconsulta la llamaremos “siguiente”.
El resultado final del recordset será el siguiente
SELECT noticia.id, noticia.titulo, noticia.texto, noticia.fecha,
(SELECT anterior.id FROM noticia AS anterior
WHERE anterior.fecha
(SELECT siguiente.id FROM noticia AS siguiente
WHERE siguiente.fecha>noticia.fecha
ORDER BY siguiente.fecha ASC LIMIT 0,1) AS siguiente
WHERE noticia.id = %s
Si nos fijamos en el panel “Vinculaciones” de Dreamweaver, el juego de registros debería devolvernos los siguientes campos: id, titulo, texto, fecha, anterior y siguiente.
Para terminar la faena, la maquetación final de la noticia podría ser similar a esto.
/ -
Hola, que pasa si borro una noticia de la base de datos, estoy haciendo un paginador automatico con Dreamweaver y una vez hecho si borro una noticia, me siguen apareciendo los links de anterior o siguiente
hola, siempre buscando cosas.. como podria hacer una navegacion de este estilo? … [anteriores 10 ] … 27 | 28 | 29 … [siguientes 10 paginas]… o algo parecido.. la verdad he intentado adaptar codigo con el que me genera dream y me ha quedado revuelto..
bueno cualquier pista se los agradezco
cana
la verdad me fije en una extensión, pero es pago..http://www.tom-muck.com/extensions/help/RecordsetNavigationSuite/RecordsetNavigationSuiteDemo%20.cfm pero no se si alguien tiene algo en free code de ejemplo para adaptarla a un php de dreamweaver?
saludos