http://martin.com.uy/wp-content/themes/martinuy2/live/proxy.php?url_especifica=
0
14
Mar
2008

Separar diseño de código en php usando el motor de plantillas de phpBB (II)

Para 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(
‘H’ => $h,
);
$template->assign_block_vars(‘condicional.condicional2’, $condicional2_out);
//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 "."
}
}

$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.

16
Mar
2008

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)

16
Mar
2008

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.,

17
Mar
2008
hugo

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.

11
Jul
2008

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)

19
Nov
2008
rhibioria

Hello. It is test.

22
Mar
2009
Nelson

He intentado hacer funcionar el ultimo ejemplo, pero me da este error:

Fatal error: template->_tpl_load(): No file specified for handle body in C:\AppServ\www\Lab\MasterPagePHPBB\template.php on line 873

Si yo quiero hacer un masterpage como en ASP.NET, cuál es la mejor forma de hacerlo en php?

y si tienes algún ejemplo donde se carguen distintas paginas sobre una misma plantilla, al hacer click en distintos links, te lo agradeceria si me lo pudieras enviar por correo.

Saludos!

22
Mar
2009

Nelson, te mando por mail el archivo con lo que estás buscando.

saludos,
martin.-

17
Apr
2009
Francisco

Bien esta muy bueno ocupaste el el motor de PHPBB que es muy bueno por lo que he podido leer por alli , me funciona a la perfecci{on pero estaba haciendo una pruebas con imagens y no me funciona, no me muestra las imagenes que agrego en el template donde tengo incluirlas?
Gracias…

6
May
2009

Francisco, no hay demasiado misterio para incluir imagenes porque se manejan como cualquier string. Creas una variable que puede ser solo la url de la imagen o que puede ser el tag “img” completo. Esa variable después la metés en el .tpl. Si es solo la url, la ponés en el atributo src={VARIABLE} y sino solo {VARIABLE}

saludos,
martin.-

  1. 2 Trackback(s)

  2. Mar 14, 2008: martin.com.uy » Artículos » Separar diseño de código en php usando el motor de plantillas de phpBB
  3. Apr 11, 2008: martin.com.uy » Artículos » ¿Cómo agregar el Estado del Tiempo a tu sitio web?

Lo siento, los comentarios para esta entrada están cerrados en este momento.