|
|
|
Este es un pequeño tutorial que se mando a una lista de PHP sobre como funcionan lo Fast Templates Vamos a un ejemplo simple para ver como funciona FastTemplate. Supongamos el tipico caso donde dentro de una tabla que es siempre igual voy a tener que meter filas con datos que iran variando. Hariamos pues un template con la tabla principal, por ejemplo: <TABLE> {FILAS} </TABLE>
y dentro definimos un container entre llaves al que llamamos FILAS (en mayusculas). Salvamos el template como main.tpl, dentro del directorio donde tenemos todos los tpl. Ahora definimos otro template con las filas en cuestion: <TR><TD> {DATO} </TD></TR>
y dentro definimos un container llamado dato. Luego salvamos el template como fila_dato.tpl Ahora vamos a nuestro programa de prueba, al que llamaremos prueba.php. Lo primero que se hace es incluir las clases con sus metodos. include("class.FastTemplate.php3");
luego hay que instanciar a la clase. El manual tiene un error que me trajo varios dolores de cabeza por que no pone la palabra new (damn). $tpl = new FastTemplate("tpl");
Generalmente yo los ubico en un directorio llamado tpl, siempre por debajo del root de mi aplicacion. Ahora en la variable $tpl es una instancia de la clase FastTemplate. Luego definiremos los templates que vamos a usar dentro de este programa $tpl->define( array( main => "main.tpl", row => "fila_dato.tpl" ));
Como veran, lo que hace el metodo define es asignar los templates a nombres para luego usarlos como referencia. Se hace con un array por que es mas rapido y claro, pero podrian hace directamente un define por cada template. Supongamos ahora que lo que mi codigo deberia hacer es hacer 10 filas nuemradas (si una tonteria, solo como ejemplo). Hago lo siguiente: for ($x = 0; $x < 10; $x++) { $tpl->assign(DATO, $x); $tpl->parse(FILAS, ".row"); }
Y esto es lo que a todos confunde. O sea tenemos que asignar datos a los containers definidos en nuestros templates. Como lo hacemos ? Hay dos metodos: assign: asigna valores a un container parse: asigna un template dentro de un container. Por que la diferencia ? Si vemos el ejemplo, en el container DATO solo deberian ir los datos a mostrar dentro de la celda especificada. Sin embargo, en el container FILAS del template main, podemos poner un dato o, como en este caso, todo un template con sus datos. Pues para meter todo el template con su dato lo que hace FastTemplate - logicamente - es parsear ese template de ahi que haya que usar ese metodo. Ahora bien, si se fijan bien, en el parseo estoy usando ".row", o sea hay un punto antes del nombre "row", eso es por que voy a meter varias veces el template dentro del container DATO dado que estoy intentando insertar 10 filas y por ende necesito concantenar la asignacion. Si no pusiera el punto, el resultado final seria que se veria solo una fila dentro del codigo html con el numero 9. Una vez que termine de asignar todo, solo me falta el ultimo parseo, que es siempre el template main. $tpl->parse(MAIN, "main");
De esta forma fasttemplate parseara todo lo que haya en el template principal. El ultimo paso sera mostrar la pagina.... $tpl->FastPrint();
Lo bueno de esto es que, si en la pagina siguiente yo tuviera que mostrar una tabla con 3 columnas en lugar de una, podria usar el mismo template principal y tener otro template con las 3 columnas. Asi, el dia que nuestro benemerito diseniador decide cambiar todos los grafiquitos de la pagina principal, solo debera respetar la estrcutura y nosotros solo cambiaremos el template (uno solo) sin siquiera tocar el codigo...
|
|