Cuando el objetivo es construir vistas limpias, mantenibles y rápidas en un proyecto con Yii, existe una alternativa que simplifica enormemente la escritura de HTML mezclado con lógica: Smarty. Este motor de plantillas permite separar la presentación del backend de forma elegante, y su integración con Yii es directa gracias a Composer y unas pocas líneas de configuración.
¿Cómo se instala Smarty en un proyecto Yii con Composer?
La instalación parte de la página oficial de extensiones de Yii Framework en [yiiframework.com] [0:55]. Se utiliza Composer, la herramienta de gestión de dependencias de PHP, ejecutando el comando composer require con el paquete yiisoft/yii2-smarty [1:18].
Composer no solo descarga Smarty, sino también todas las librerías dependientes que necesita para funcionar. Además, actualiza automáticamente el archivo composer.json para que el proyecto se mantenga completo sin importar dónde se despliegue [1:35].
¿Qué configuración necesita Yii para usar Smarty?
Una vez instalado, hay que registrar un nuevo component en el archivo config/web.php, dentro de la sección components. Se agrega un bloque llamado view cuyo renderer apunta a la clase de Smarty ya instalada [1:55]. La estructura queda así:
php
'view' => [
'renderers' => [
'tpl' => [
'class' => 'yii\smarty\ViewRenderer',
],
],
],
Este bloque se coloca después del URL manager y con eso Yii ya reconoce archivos con extensión .tpl como plantillas Smarty [2:18].
¿Cómo se crea una vista con extensión tpl?
En lugar de crear un archivo .php como vista, se crea un archivo con extensión .tpl dentro de la carpeta del controlador correspondiente. Por ejemplo, para la acción que lista todos los libros en el controlador BookController, se crea all.tpl [2:55]. En el controlador, la función render debe especificar la extensión completa del archivo:
php
return $this->render('all.tpl', ['books' => $books]);
¿Qué es Smarty y por qué facilita el trabajo en vistas?
Smarty es un motor de plantillas (template engine) que envuelve toda la lógica de presentación en llaves {}, también conocidas como curly braces [3:30]. Para imprimir una variable basta con escribir {$variable}, y para iterar sobre una colección se usa {foreach}.
- Reduce la sintaxis comparada con PHP puro.
- Hace el código más fácil de leer y por lo tanto más mantenible.
- Al ser más mantenible, resulta más escalable a futuro.
Un ejemplo práctico de iteración sobre libros [5:50]:
smarty
<ol>
{foreach $books as $book}
<li>{Html::a('libro', ['book/detail', 'id' => $book->id])}</li>
{/foreach}
</ol>
Para usar clases de Yii dentro del template, se emplea la directiva {use}, equivalente al use de PHP [6:05]:
smarty
{use class='yii\helpers\Html'}
¿Smarty afecta el rendimiento de la aplicación?
Existe la percepción de que agregar un template engine hace más lenta la respuesta. La realidad es que PHP interpreta las plantillas de Smarty de forma increíblemente rápida [4:25]. La diferencia de rendimiento es tan mínima que no justifica renunciar a todas las ventajas de legibilidad y mantenimiento que ofrece.
¿Cómo se construyen URLs y se usan condicionales en Smarty?
Un punto importante es que las referencias a URLs siempre deben apuntar al controlador, la acción y sus parámetros, nunca a las reglas del URL shortener [7:50]. Esto garantiza homogeneidad en todo el proyecto:
smarty
{Html::a('ver libro', ['book/detail', 'id' => $book->id])}
Smarty también soporta condicionales directamente en el template. Las funciones principales disponibles son:
{if}, {else}, {elseif}: para lógica condicional.
{foreach}: para iterar colecciones.
{for}: para ciclos numéricos.
{assign}: para declarar variables dentro del template.
Un ejemplo de condicional inline [8:40]:
smarty
{if $titulo > 2}muchos{else}pocos{/if}
Aquí muchos y pocos son simplemente texto plano, parte del template, mientras que {if} y {else} son palabras reservadas del motor de plantillas [9:10].
Con estas herramientas se completa el ciclo modelo, vista y controlador en Yii, quedando listo el camino para construir aplicaciones completas con vistas limpias y eficientes. Si ya probaste Smarty o prefieres otro template engine, comparte tu experiencia en los comentarios.