https://manuais.iessanclemente.net/index.php?title=Curso_POO_Motores_de_plantillas:_Smarty&feed=atom&action=historyCurso POO Motores de plantillas: Smarty - Historial de revisiones2024-03-28T15:12:47ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Curso_POO_Motores_de_plantillas:_Smarty&diff=36996&oldid=prevVlourido en 09:47 22 oct 20132013-10-22T09:47:48Z<p></p>
<p><b>Página nueva</b></p><div>== Motores de plantillas ==<br />
<br />
Os motores de plantillas son un xeito sinxelo de separar nunha aplicación a lóxica de presentación da lóxica de negocio. Deste xeito, non será necesario que a persoa ou persoas que desenvolvan o interface web da aplicación coñezan a sintaxe e as etiquetas empregadas na linguaxe PHP; no canto terán que familiarizarse únicamente cun conxunto de etiquetas moito máis simple, e cunha mecánica de utilización máis cercana a das linguaxes de marcas.<br />
<br />
=== Smarty ===<br />
<br />
Un dos motores de plantillas que podemos empregar coa linguaxe PHP é [http://www.smarty.net/ Smarty] ([http://www.smarty.net/docs/en/ enlace á documentación en inglés]). Para instalar Smarty nun servidor soamente temos que descargar a última versión e copiar os arquivos correspondentes á libraría nunha ruta do sistema. A continuación deberemos indicarlle ao intérprete PHP a localización da libraría; o máis habitual é configurar a variable '''[http://www.php.net/manual/es/ini.core.php#ini.include-path include_path]''' do sistema para engadir a ruta correspondente.<br />
<br />
<source lang="PHP"><br />
include_path = "...;/usr/local/lib/php/smarty"<br />
</source><br />
<br />
Para poder chamar a unha plantilla Smarty dende unha páxina PHP, teremos que incluir o arquivo '''Smarty.class.php''', instanciar un obxecto da clase Smarty, e configurar as rutas para 4 directorios.<br />
<br />
<source lang="PHP"><br />
<?php <br />
require_once('Smarty.class.php');<br />
<br />
$smarty = new Smarty();<br />
$smarty->setTemplateDir(RUTA . '/smarty/templates/');<br />
$smarty->setCompileDir(RUTA . '/smarty/templates_c/');<br />
$smarty->setConfigDir(RUTA . '/smarty/configs/');<br />
$smarty->setCacheDir(RUTA . '/smarty/cache/');<br />
?><br />
</source><br />
<br />
As rutas anteriores correspóndense con:<br />
<br />
*'''setTemplateDir'''. Especifica a ruta na que se almacenarán as plantillas Smarty do proxecto.<br />
*'''setCompileDir'''. Especifica a ruta na que se almacenarán as plantillas compiladas do proxecto.<br />
*'''setConfigDir'''. Especifica a ruta na que se almacenarán or arquivos de configuración do proxecto.<br />
*'''setCacheDir'''. Especifica a ruta na que se almacenará o saída xerada por Smarty a partires das plantillas do proxecto.<br />
<br />
É importante ter en conta que Smarty fai uso da característica de carga automática de clases de PHP, polo que no caso de empregar a función '''[[Curso_POO_PHP_Utilización_de_obxectos#Utilización_de_obxectos|__autoload]]''' no noso proxecto deberemos cambiala pola función '''[http://www.php.net/manual/es/function.spl-autoload-register.php spl_autoload_register]'''.<br />
<br />
As plantillas Smarty gárdanse en arquivos que empregan normalmente extensión ".tpl". Unha vez configuradas as rutas, para chamar a unha plantilla dende Smarty empregaremos o método '''display''':<br />
<br />
<source lang="PHP"><br />
<?php <br />
require_once('Smarty.class.php');<br />
<br />
$smarty = new Smarty();<br />
$smarty->setTemplateDir(RUTA . '/smarty/templates/');<br />
$smarty->setCompileDir(RUTA . '/smarty/templates_c/');<br />
$smarty->setConfigDir(RUTA . '/smarty/configs/');<br />
$smarty->setCacheDir(RUTA . '/smarty/cache/');<br />
<br />
$smarty->display('index.tpl');<br />
?><br />
</source><br />
<br />
=== Plantillas Smarty ===<br />
<br />
As plantillas Smarty compóñense de HTML que contén etiquetas propias de Smarty intercaladas. As etiquetas das plantillas Smarty empregan por defecto chaves como delimitadores. Os principais elementos que podemos empregar nas etiquetas propias de Smarty son:<br />
<br />
==== Variables ====<br />
<br />
Deben ir precedidas do signo '''$'''. Poden ser elementos complexos como arrays ou obxectos, que empregan a mesma sintaxe que en PHP para acceder aos seus membros respectivos. As variables deben crearse antes de executar a plantilla empregando o método '''[http://www.smarty.net/docs/en/api.assign.tpl assign]''' da libraría Smarty. Por exemplo:<br />
<br />
Páxina PHP '''index.php''':<br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
<?php <br />
require_once('Smarty.class.php');<br />
<br />
$smarty = new Smarty();<br />
$smarty->setTemplateDir(RUTA . '/smarty/templates/');<br />
$smarty->setCompileDir(RUTA . '/smarty/templates_c/');<br />
$smarty->setConfigDir(RUTA . '/smarty/configs/');<br />
$smarty->setCacheDir(RUTA . '/smarty/cache/');<br />
<br />
$smarty->assign('post', $post);<br />
$smarty->display('index.tpl');<br />
?><br />
</source><br />
</div><br />
<br />
Plantilla Smarty '''index.tpl''': <br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
<div class="data-post"><br />
<span>{$post->get_data()}</span><br /><br />
</div><br />
</source><br />
</div><br />
<br />
As variables Smarty permiten que se lles apliquen '''[http://www.smarty.net/docs/en/language.modifiers.tpl modificadores]''' que inflúen no seu comportamento. Estes especifícanse a continuación do nome da variable separados por unha barra vertical '''|'''. Algúns modificadores poden levar tamén parámetros, separados por dous puntos ''':'''. Por exemplo:<br />
<br />
Plantilla Smarty '''index.tpl''': <br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
<div class="data-post"><br />
<span>{$post->get_data()|date_format:"%d"}</span><br /><br />
</div><br />
</source><br />
</div><br />
<br />
==== Estruturas de control ====<br />
<br />
Nalgúns casos pode ser necesario empregar nas plantillas algunha estrutura de control. Por exemplo, podemos necesitar que non se amose certo código HTML se o usuario non se atopa logueado no sistema. Ou repetir un conxunto de etiquetas HTML por cada elemento dun array. Smarty incorpora nas súas etiquetas algunhas [http://www.smarty.net/docs/en/language.builtin.functions.tpl funcións] que nos permiten facer isto empregando a mesma sintaxe que PHP para avaliar condicións.<br />
<br />
Plantilla Smarty '''index.tpl''' cunha expresión condicional: <br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
...<br />
{if $is_admin}<br />
<div class="borrar-comentario"><br />
...<br />
</div><br />
{else}<br />
...<br />
{/if}<br />
...<br />
</source><br />
</div><br />
<br />
Plantilla Smarty '''index.tpl''' cun bucle: <br />
<br />
<div style="margin-left: 2em;"><br />
<source lang="php"><br />
...<br />
{foreach $comentarios as $comentario}<br />
<div class="comentario"><br />
{$comentario->get_texto()|nl2br}<br />
...<br />
</div><br />
{/foreach}<br />
...<br />
</source><br />
</div><br />
<br />
--[[Usuario:Vlourido|Víctor Lourido]] 09:56 22 oct 2013 (CEST)</div>Vlourido