Algunos se preguntarán, porqué no hacemos simplemente un " include " ? La respuesta es muy siemple. Eficiencia. La función include implica un acceso a disco, lo cual la hace bastante "costosa" en términos de eficiencia. Así que leyendo el template 1 sola vez en memoria, y luego utilizándolo varias veces, hacemos un mejor uso de los recursos.
Teniendo estos temas en cuenta, es que podemos seguir ahora con el desarrollo el Foro.
Un Tema por vez
Ya teniendo las bases de nuestro foro, el diseño de la tabla en la base de datos y conociendo como funciona nuestro sistema de templates, podemos comenzar a crear la primera página, en la que mostraremos todos los temas del foro:
index.php
<?php
require( 'configuracion.php' );
require( 'funciones.php' );
include( 'header.html' );
/* Pedimos todos los temas iniciales (identificador==0)
* y los ordenamos por ult_respuesta */
$sql = "SELECT id, autor, titulo, fecha, respuestas, ult_respuesta " ;
$sql .= "FROM foro WHERE identificador=0 ORDER BY ult_respuesta DESC" ;
$rs = mysql_query ( $sql , $con );
if( mysql_num_rows ( $rs )> 0 )
{
// Leemos el contenido de la plantilla de temas
$template = implode ( "" , file ( "temas.html" ));
include( 'titulos.html' );
while( $row = mysql_fetch_assoc ( $rs ))
{
$color =( $color == "" ? "#5b69a6" : "" );
$row [ "color" ] = $color ;
mostrarTemplate ( $template , $row );
}
}
include( 'footer.html' );
?>
¿Eso es todo? Si, eso es todo. Ahora revisemos paso a paso lo que hace el script. Primero tenemos una serie de require s e include s . El primero incluye el primer Script que hicimos, que realiza la conexión a la base de datos. El segundo, incluye un archivo.php que contiene funciones importantes del foro, como por ejemplo, mostrarTemplate . El tercero, incluye un header genérico que utilizaremos para darle a todas nuestras páginas, un diseño similar. Allí podremos colocar un logo del sitio, links importantes, banners, etc.
Aquí lo que hacemos es ejecutar un query en la base de datos, que nos traerá todos los mensajes que son iniciadores de un tema, o sea, cuyo identificador esté en cero. El resto de los mensajes, que sean respuestas a un tema en particular, tendrán en el campo identificador el valor del mensaje al que responden. A estos temas, le pedimos a la base que los ordene por la fecha de última respuesta, de manera descendente, así en nuestro foro, tendremos los mensajes más recientes primero. También realizamos una decisión, solo mostraremos los temas de nuestro Foro si la cantidad de filas recuperadas desde la base, son mayores a 0.