Cuando empezamos a desarrollar con PHP solemos hacerlo usando málas prácticas, como mezclar PHP y HTML/CSS en el mismo fichero. Pero quizás lo hacíamos porque desconocíamos un motor de plantillas tan potente y completo como Smarty.
- 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 :