Crear un foro en PHP y Mysql

by Pablo Rigazzi - 22 Abril 2008

Los Templates

Antes de dar un paso más en la explicación, quiero hacerles unos comentarios respecto al “simple” sistemita de templates que utilizaremos en el foro. Primero, para aquellos que no sepan que es un Template, les recomiendo que lean los artículos de Nok y de Luigi en nuestra sección de Templates de Zonaphp.com, por lo menos para que tomen una idea de que son y para que sirven.

Ahora, mi idea al utilizar templates, fue la de que los usuarios, pudieran modificar a su gusto el aspecto del foro, sin por ello tener que tocar el código de la aplicación. Esto es algo que el tutorial anterior no tenía en cuenta e incluía todo el código HTML de salida dentro del código mismo del foro, lo cual no es siempre recomendable. Lo que haremos en este caso es utilizar archivos .html que dentro contendrán solo diseño ( o sea, código HTML ) y en los lugares en los que deseemos colocar contenido “dinámico”, utilizaremos el formato simple para mostrar el contenido de variables, esto es :

<?=$variable?>.

Para “interpretar” un template, primero lo leemos en memoria utilizando la función file() y luego utilizaremos una simple función a la que le pasaremos como parámetro el template y las variables que hay que reemplazar. Para muestra, basta un botón:

Ejemplo de la pagina de ejemplo.html

Nombre: <b><?=$nombre?></b><br>
Edad : <b><?=$edad?></b><br>
Domicilio : <?=$domicilio?> <hr>

Ejemplo de la pagina 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 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.

Previous pageNext page

4 Comments on “Crear un foro en PHP y Mysql”

  1. Codespanish » Blog Archive » Why you shouldn’t code in Spanish Says:

    [...] Take for example this PHP code from the post “Building a forum in PHP and Mysql”. [...]

  2. Jaime recuerdo Says:

    Hola, gracias para estos consejos que me han servido para crear mi foro gratis en el sitio foroactivo. Ahí, tienen varias versiones de foros phpbb y sobre todo la posibilidad pasar de la versión phpbb2 a 3 o invision sin problema como un bueno webmaster. Además, esta nueva versión tiene muchas opciones gratis como mas de 3000 skin, la posibilidad de cambiar lo CSS y templates, crear perfiles personalizados, chatbox, sistema de reputación…y la ultima es cambiar los foros en blog y viceversa ! saludos

  3. Pablo Matamoros Says:

    No problems, as long as you link back or mention us.

  4. Abrir Correo Says:

    Es interesante lo que dices. Ya te agregué a mi lector de feeds RSS, adios

Leave a Reply