- Un diseñador tendrá muy difícil manejar el código HTML/CSS de esa página.
- La escalabilidad es prácticamente nula.
- Mantener una aplicación así se complica progresivamente.
- La depuración de ese tipo de aplicaciones se hace muy complicada.
Pero podemos escribir aplicaciones PHP usando motores de plantillas que separan la presentación (HTML/CSS) del código (PHP), solventando de este modo todos esos problemas, y ofreciéndonos además multitud de ventajas adicionales. Este es el caso de Smarty, un motor de plantillas ya veterano en el mercado.
Estas son las funcionalidades que podremos disfrutar con Smarty:
- Plantillas limpias fáciles de usar por los diseñadores.
- Escalabilidad.
- Mantenimiento más sencillo (al igual que la escalabilidad, únicamente con la separación de código y presentación no se consigue un mantenimiento más sencillo, también se requerirá de una buena codificación).
- Depuración óptima del código, al tener ficheros pequeños únicamente con código PHP.
- Posibilidad de introducir comentarios dentro de las plantillas que no se enviarán al servidor. Ejemplo:
{* comentario smarty *}en lugar de<!-- comentario HTML --> - Funciones integradas que facilitan el tratamiento de variables. Ejemplos:
{foreach}{/foreach},{if}{else}{/if}. - Funciones asistentes para generación de código HTML. Ejemplos:
{html_image file=”banner.jpg”}generaría<img src="banner.jpg" alt="" width="700" height="55" /> - Expandir Smarty con más funcionalidades mediante plugins.
Veamos un sencillo ejemplo de una aplicación hecha con Smarty:
INDEX.PHP
<?php
include('libs/Smarty.class.php');
$frutas = array(
array(
'name' => 'malus rosaceae',
'url' => 'http://es.wikipedia.org/wiki/Manzana',
'image' => 'http://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Fuji_apple.jpg/200px-Fuji_apple.jpg'
),
array(
'name' => 'fragaria',
'url' => 'http://es.wikipedia.org/wiki/Fresa',
'image' => 'http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Chandler_strawberries.jpg/225px-Chandler_strawberries.jpg'
),
array(
'name' => 'citrus sinensis',
'url' => 'http://es.wikipedia.org/wiki/Naranja_%28fruta%29',
'image' => 'http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Citrus_sinensis.jpg/300px-Citrus_sinensis.jpg'
),
);
$frutas_list = array('manzana','fresa','naranja');
$tpl = new Smarty();
$tpl->template_dir = './';
$tpl->compile_dir = './';
$tpl->config_dir = './';
$tpl->cache_dir = './';
$action = isset($_GET['action']) ? $_GET['action'] : 'list';
switch ($action) {
case 'list':
$tpl->assign('frutas',$frutas_list);
$tpl->display('list.tpl');
break;
case 'detail':
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$tpl->assign('fruta', $frutas[$id]);
$tpl->display('detail.tpl');
break;
}
LIST.TPL
<html>
<head>
<title>Listado de frutas</title>
</head>
<body>
<form>
{* Con esta sentencia crearemos el HTML de un SELECT/OPTION *}
{html_options options=$frutas name=id}
<input type='hidden' name='action' value='detail' />
<input type='submit' value='Ver' />
</form>
</body>
</html>
DETAIL.PHP
<html>
<head>
<title>{$fruta.name}</title>
</head>
<body>
<h1>{$fruta.name}</h1>
<a href="{$fruta.url}"><img src="{$fruta.image}" /></a>
<br />
<a href=?action=list>Volver</a>
</body>
ALTERNATIVA A SMARTY
<?php
define('TEMPLATES_DIR', './templates/');
class TemplateEngine extends stdClass {
public function fetch($__tpl) {
foreach (get_object_vars($this) as $__name=>$__value) {
$$__name = $__value;
}
require(TEMPLATES_DIR . $__tpl);
}
}
INDEX.PHP
<?php
include('TemplateEngine.class.php');
$tpl = new TemplateEngine();
$tpl->frutas = array('manzana','pera','fresa','platano','mandarina');
$tpl->fetch('ficha.tpl');
Lo que en Smarty sería algo como:
<?php
include('Smarty.class.php');
$smarty = new Smarty();
$smarty->assign('frutas', array('manzana','pera','fresa','platano','mandarina'));
$smarty->display('ficha.tpl');
./TEMPLATES/FICHA.TPL
<html>
<head>
<title>Sistema de plantillas sin Smarty</title>
</head>
<body>
<ul>
<?php foreach ($frutas as $fruta) : ?>
<li><?=$fruta?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
Equivalente a la plantilla Smarty:
<html>
<head>
<title>Sistema de plantillas sin Smarty</title>
</head>
<body>
<ul>
{foreach from=$frutas item=fruta}
<li><{$fruta}</li>
{/foreach}
</ul>
</body>
</html>
Ya no hay excusa para hacer una aplicación web en PHP de calidad. Con un motor de plantillas como Smarty podremos crear una aplicación profesional invirtiendo muy poco tiempo.
No hay comentarios:
Publicar un comentario
Comenta :