Ejemplo de la página de ejemplo.php
<?php
function mostrarTemplate($tema, $variables)
{
//var_dump($variables);
extract($variables);
eval("?>".$tema."<?");
}
$agenda = array(
"0" => array("nombre"=>"Marcelo", "edad"=>"25", "domicilio"=>"VeraCRuz 342"),
"1" => array("nombre"=>"Alejandra", "edad"=>"18", "domicilio"=>"Los Olmos 67"),
"2" => array("nombre"=>"Micaela", "edad"=>"23", "domicilio"=>"Prof. Mariño 8")
);
$tpl = implode("", file("ejemplo.html"));
foreach($agenda as $registro)
{
mostrarTemplate($tpl, $registro);
}
?>
Aquí vemos como, partiendo de los datos que tenemos en un array, los mostramos basándonos en un simple template. La función mostrarTemplate toma como parámetros el contenido del template y un array asociativo con los valores a reemplazar. La función de PHP extract() se encarga de pasar estos valores al ámbito en el que se llama la función, en este caso, el ámbito de la función. Por lo que si tenemos un arreglo del tipo $a = array("clave" => "valor"), al ejecutar extract($a), entonces pasaremos a tener una variable disponible, de nombre $variable y con "valor" como contenido. Luego, la función eval() se encarga del resto, o sea, de ejecutar todo el código (el del Template) que se le pasa como parámetro.
Algunos se preguntarán, porqué no hacemos simplemente un "include" ? La respuesta es muy simple. 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:
Ejemplo de la página de 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 requires e includes. 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.
$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)
{
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.
Luego, dentro del While principal del programa, hacemos toda la "magia":
// 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);
}
Usuarios que han visto este tema también han visto...
- Leer archivos Excel desde PHP
- Trabajar con Register Globals en Off con PHP
- Pasar saltos de línea de BD a HTML
- Protección contra el Hotlinking
- Colorear codigo PHP
- Versión imprimible de este documento
- Enviar por e-mail este documento