Actualizado el domingo, 19 junio, 2016
Ahora crearemos la página que mostrara un tema y todas las respuestas que haya en él. Para ello, vemos como en el home del foro, llamamos a un script foro.php y le pasamos el id del tema que queremos ver. Luego, solo tenemos que obtener de la base el o los temas, en los que el id sea igual al que pasamos, o que el identificador (el campo que indica que ese mensaje es en respuesta a cierto tema) sea igual al identificador, los ordenamos por fecha y listo, foro al dente.
En este caso, el template que utilizaremos para mostrar cada uno de los mensajes, será una tabla con todos los datos necesarios: el autor del mensaje, el título, la fecha del mensaje, el mensaje en si mismo. Pero también agregaremos dos detalles. Primero, un link hacia el formulario que creamos antes, de modo que un usuario pueda citar un mensaje en particular, y segundo, un Anchor (o Ancla) para que al responder a un mensaje, se pueda acceder directamente al mismo por su id en la base de datos.
post.html
<table width="90%" border="0" align="center" cellpadding="2" cellspacing="2"> <tr bgcolor="<?=$color?>"> <td width="25%" valign="top"> <b><a name="<?=$id?>"><?=$autor?></a></b><br> <font size="-2">Enviado el : <?=$enviado?></font> </td> <td> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><strong><font size="-1"> <?=$titulo?> </font></strong> </td> <td width="10%" align="right"> [ <a href="respuesta.php?id=<?=$id?>&citar=1">CITAR</a> ]</td> </tr> </table> <hr align="center" width="100%" size="2" noshade> <?=$mensaje?></td> </tr> <tr> <td colspan="2" height="5"></td> </tr> </table>
foro.php
<?php require('configuracion.php'); require('funciones.php'); $id = $_GET["id"]; if(empty($id)) Header("Location: index.php"); $sql = "SELECT id, autor, titulo, mensaje, "; $sql.= "DATE_FORMAT(fecha, '%d/%m/%Y %H:%i:%s') as enviado FROM foro "; $sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC"; $rs = mysql_query($sql, $con); include('header.html'); if(mysql_num_rows($rs)>0) { include('titulos_post.html'); $template = implode("", file('post.html')); while($row = mysql_fetch_assoc($rs)) { $color=($color==""?"#5b69a6":""); $row["color"] = $color; //manipulamos el mensaje $row["mensaje"] = nl2br($row["mensaje"]); $row["mensaje"] = parsearTags($row["mensaje"]); mostrarTemplate($template, $row); } } include('footer.html'); ?>
Incluimos la conexión a la base de datos, el archivo de funciones y validamos de que exista la variable $id, ya que de lo contrario, nada podríamos hacer y nuestro foro fallaría en el Query. Hablando del Query, podemos ver como utilizamos la función de MySql DATE_FORMAT() para convertir el formato por defecto del tipo datetime (‘AAAA-MM-DD hh:mm:ss’) en algo que sea más común para nuestro idioma (‘DD/MM/AAAA hh:mm:ss’).
En este script lo que vemos, son dos transformaciones que le hacemos al mensaje, antes de enviarlo al template. Primero utilizamos la función de PHP nl2br(), que convierte todos los saltos de linea, en tags <br />, de esa manera, los saltos que un usuario ingrese en el textarea, serán agregados correctamente al mostrar el mensaje. Luego, vemos como llamamos a la función parsearTags().
funciones.php
<?php function parsearTags($mensaje) { $mensaje = str_replace("[citar]", "<blockquote><hr width='100%' size='2'>", $mensaje); $mensaje = str_replace("[/citar]", "<hr width='100%' size='2'></blockquote>", $mensaje); return $mensaje; } ?>
En esta función, podemos agregar todas las modificaciones que queremos al mensaje, antes de mostrarlo en el Foro. En el ejemplo, vemos como hemos implementado el uso de un tag propio. El mismo, dentro de la función, será reemplazado por el código HTML necesario para destacar el citado de un mensaje, todo esto gracias a la función str_replace() de PHP (más info en el manual). Este es el tag que se agrega automáticamente, y que notamos cuando respondíamos un mensaje.
Esta función, se puede personalizar, agregando todos los tags que quieras, para ofrecer a sus usuarios la libertad de darle formato a sus mensajes.
Ahora ya podemos disfrutar de nuestro nuevo foro.
Grandisimo blog teneis tio, enhorabuena!!!!