Separar diseño de código en php usando el motor de plantillas de phpBB (II)
Marzo 14th, 2008Para esta segunda parte de la serie (ver la primera aquí) explicaré como utilizar condicionales, como anidar bloques y como generar salidas en distintas páginas html utilizando el mismo script php.
Condicionales.
Los condicionales son estructuras que permiten ejecutar una parte del código si se cumple tal condición. Supongamos que si la variable $i es igual a 1, queremos mostrar un bloque dentro de la página html y que si no se cumple queremos mostrar la página sin ese bloque.
Código php:
<?php
include_once(“template.php”);
$template = new template();
$prueba = “Esta es una prueba”;
$template->assign_vars(array(
‘VARIABLE1′ => $prueba,
));
$i = rand(0, 1); //$i toma un valor entero aleatorio en el rango 0 - 1
if($i == 1)
{
$condicional_out = array(
‘I’ => $i,
);
$template->assign_block_vars(‘condicional’, $condicional_out);
}
$template->set_filenames(array(
‘body’ => ‘prueba.html’));
$template->display(‘body’);
unset($template);
?>
Código HTML:
<html><head><title></title></head><body>
<table>
<tr>
<td>
{VARIABLE1}
</td>
</tr>
</table>
<!– BEGIN condicional –>
<table>
<tr>
<td>
{condicional.I}
</td>
</tr>
</table>
<!– END condicional –>
</body></html>
La primera tabla se mostrará siempre. La segunda tabla aparecerá unicamente si la condición se cumple. Como pueden ver, la idea es la misma que la de las iteraciones.
Bloques anidados.
Ahora supongamos que si se cumple la condición $i es igual a 1 queremos que se muestre esa tabla pero además si se cumple que $h es igual a 5 queremos que se muestre una nueva fila dentro de esa tabla. Un bloque condicional estaría dentro de otro bloque condicional.
Código php:
<?php
include_once(“template.php”);
$template = new template();
$prueba = “Esta es una prueba”;
$template->assign_vars(array(
‘VARIABLE1′ => $prueba,
));
$i = rand(0, 1);
if($i == 1)
{
$condicional_out = array(
‘I’ => $i,
);
$template->assign_block_vars(‘condicional’, $condicional_out);
$h = rand(0, 5); //$h toma un valor entero aleatorio en el rango 0 - 5
if($h == 5)
{
$condicional2_out = array(//Prestar atención al nombre del bucle. Se forma con el nombre del primer bucle, el “.” y el nombre del segundo. En caso de haber más se van agregando en órden, siempre separados por “.”
‘H’ => $h,
);
$template->assign_block_vars(‘condicional.condicional2’, $condicional2_out);
}
}
$template->set_filenames(array(
‘body’ => ‘prueba.html’));
$template->display(‘body’);
unset($template);
?>
Código HTML:
<html><head><title></title></head><body>
<table>
<tr>
<td>
{VARIABLE1}
</td>
</tr>
</table>
<!– BEGIN condicional –>
<table>
<tr>
<td>
{condicional.I}
</td>
</tr>
<!– BEGIN condicional2 –>
<tr>
<td>
{condicional.condicional2.H}
</td>
</tr>
<!– END condicional2 –>
</table>
<!– END condicional –>
</body></html>
Podríamos combinar, de la misma manera, bloques de iteraciones con bloques condicionales.
Un mismo script php, distintas salidas HTML.
Por último vamos a suponer esto: tenemos un script php en el que ingresa una variable GET llamada “prueba” (a través de la URL). Si esta variable es igual a 1, generamos la salida en prueba1.html. Si esa variable es igual a 2, generamos la salida en prueba2.html.
Código PHP:
<?php
include_once(“template.php”);
$template = new template();
if($_GET['prueba'] == 1) //La variable prueba ingresada es 1. Por ejemplo: http://dominio.com/prueba.php?prueba=1
{
$prueba = “Pagina 1″;
$template->assign_vars(array(
‘VARIABLE1′ => $prueba,
));
$template->set_filenames(array(
‘body’ => ‘prueba1.html’)); //La salida se da en prueba1.html
}
if($_GET['prueba'] == 2) //La variable prueba ingresada es 2. Por ejemplo: http://dominio.com/prueba.php?prueba=2
{
$prueba = “Pagina 2″;
$template->assign_vars(array(
‘VARIABLE1′ => $prueba,
));
$template->set_filenames(array(
‘body’ => ‘prueba2.html’)); //La salida se da en prueba2.html
}
$template->display(‘body’);
unset($template);
?>
Código HTML de prueba1.html
<html><head><title></title></head><body>
<table>
<tr>
<td>
{VARIABLE1}
</td>
</tr>
</table>
</body></html>
Código HTML de prueba2.html
<html><head><title></title></head><body>
<table>
<tr>
<td>
{VARIABLE1}
</td>
</tr>
</table>
</body></html>
Desde luego que se pueden hacer muchas más cosas pero voy a ir dejando por aquí para no aburrir. Estoy a las órdenes por cualquier consulta.









































7 respuestas a “Separar diseño de código en php usando el motor de plantillas de phpBB (II)”
Por hugo el Mar 16, 2008 | Responder
No se si esta opinion esta en el lugar corecto o tendra algo que ver con este post(perdon)pero mi estrategia para cambiar templates xml a lo loco es descomprimiendo el archivo guardarlo en un fichero y subirlo es 100% efectivo como subirlo directamente del disco duro metodo que muchisimas personas no pueden obteneer el resultado(si hable de mas decimelo)
Por martin el Mar 16, 2008 | Responder
No entendì mucho Hugo pero creo que estamos hablando de cosas distintas: el artìculo es sobre como separar còdigo php de diseño html en cualquier script que programes usando el motor de plantillas de phpBB (el foro).
Saludos,
martin.,
Por hugo el Mar 17, 2008 | Responder
Tenes razon me parecio que no tenia nada que ver pero ya le habia dado el ok,igual me sirve ya que todo lo que venga sobre este tipo de informacion lo guardo todo.
Por mario el Jul 11, 2008 | Responder
excelente men bajaste la idea del phpbb muy facil y practico con tus codigos voy a implementar estos script en mi pagina web para visualizar perfiles de usuarios y ala proxiam que cambie el diseño, solo le muevo alos templates (Y)
Por rhibioria el Nov 19, 2008 | Responder
Hello. It is test.