mirror of
https://github.com/smarty-php/smarty.git
synced 2025-10-30 03:41:36 +01:00
387 lines
10 KiB
XML
387 lines
10 KiB
XML
|
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
|||
|
|
<!-- $Revision$ -->
|
|||
|
|
<chapter id="tips">
|
|||
|
|
<title>Consejos y Trucos</title>
|
|||
|
|
<para>
|
|||
|
|
</para>
|
|||
|
|
<sect1 id="tips.blank.var.handling">
|
|||
|
|
<title>Manipulaci<EFBFBD>n de Variables Vacias</title>
|
|||
|
|
<para>
|
|||
|
|
Cuando usted en algunas ocaciones quiere imprimir un valor que
|
|||
|
|
usted def<65>ne a una variable vacia en vez de imprimir nada, tal
|
|||
|
|
como imprimir "&nbsp;" a fin de que el plano del fondo de
|
|||
|
|
la tabla funcione correctamente. Muchos usarian una sentencia
|
|||
|
|
{if} para manejar esto, mas existe otra forma con Smarty, usando
|
|||
|
|
el modificador de la variable <emphasis>default</emphasis>.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Imprimiendo &nbsp; cuando una variable esta vacia</title>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{* the long way *}
|
|||
|
|
|
|||
|
|
{if $title eq ""}
|
|||
|
|
|
|||
|
|
{else}
|
|||
|
|
{$title}
|
|||
|
|
{/if}
|
|||
|
|
|
|||
|
|
|
|||
|
|
{* the short way *}
|
|||
|
|
|
|||
|
|
{$title|default:" "}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
</sect1>
|
|||
|
|
|
|||
|
|
<sect1 id="tips.default.var.handling">
|
|||
|
|
<title>Manipulaci<EFBFBD>n del valor default de una variable</title>
|
|||
|
|
<para>
|
|||
|
|
Si una variable es usada frecuentemente en sus templates,
|
|||
|
|
aplicando el modificador default toda vez que este es
|
|||
|
|
mencionado puede evitar un bit desagradable. Usted puede
|
|||
|
|
remediar esto con la atribuci<63>n de un valor por default a
|
|||
|
|
la variable con la funci<63>n
|
|||
|
|
<link linkend="language.function.assign">assign</link>.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Atribuyendo el valor por default a una variable en el template</title>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{* ponga esto en algun lugar en la parte de arriba de su template *}
|
|||
|
|
{assign var="title" value=$title|default:"no title"}
|
|||
|
|
|
|||
|
|
{* Si el $titulo estaba vacio, este ahora tendra el valor "sin titulo" cuando
|
|||
|
|
usted lo exiba *}
|
|||
|
|
{$title}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
</sect1>
|
|||
|
|
<sect1 id="tips.passing.vars">
|
|||
|
|
<title>Pasando la variable titulo a la cabecera del template</title>
|
|||
|
|
<para>
|
|||
|
|
Cuando la mayoria de sus templates usan los mismo encabezados y
|
|||
|
|
los mismos pies de pagina, es com<6F>n dividirlos uno en cada template
|
|||
|
|
y entonces incluirlos. Que pasara si el encabezado necesita tener
|
|||
|
|
un titulo diferente, dependiendo de que pagina estas viniendo?
|
|||
|
|
usted puede pasar el titulo en el encabezado cuando este es incluido.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Pasando la variable titulo al encabezado del template</title>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
mainpage.tpl
|
|||
|
|
------------
|
|||
|
|
|
|||
|
|
{include file="header.tpl" title="Main Page"}
|
|||
|
|
{* El cuerpo del template viene aqu<71> *}
|
|||
|
|
{include file="footer.tpl"}
|
|||
|
|
|
|||
|
|
|
|||
|
|
archives.tpl
|
|||
|
|
------------
|
|||
|
|
|
|||
|
|
{config_load file="archive_page.conf"}
|
|||
|
|
{include file="header.tpl" title=#archivePageTitle#}
|
|||
|
|
{* El cuerpo del template viene aqu<71> *}
|
|||
|
|
{include file="footer.tpl"}
|
|||
|
|
|
|||
|
|
|
|||
|
|
header.tpl
|
|||
|
|
----------
|
|||
|
|
<HTML>
|
|||
|
|
<HEAD>
|
|||
|
|
<TITLE>{$title|default:"BC News"}</TITLE>
|
|||
|
|
</HEAD>
|
|||
|
|
<BODY>
|
|||
|
|
|
|||
|
|
|
|||
|
|
footer.tpl
|
|||
|
|
----------
|
|||
|
|
</BODY>
|
|||
|
|
</HTML>
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
<para>
|
|||
|
|
Cuando la pagina principal es mostrada, el titulo de la "P<>gina
|
|||
|
|
Principal" es pasado al template header.tpl, y ser<65> posteriormente
|
|||
|
|
usado como el titulo. Cuando la pagina de archivo es mostrada, el
|
|||
|
|
titulo sera "Archivos". Observelo en el ejemplo de archivo, nosotros
|
|||
|
|
estamos usando una variable del archivo archives_page.conf en vez de
|
|||
|
|
una variable codificada rigida. Tambien note que "BC news" es mostrada
|
|||
|
|
si la variable $titulo no esta definida, usando el modificador de la
|
|||
|
|
variable <emphasis>default</emphasis>.
|
|||
|
|
</para>
|
|||
|
|
</sect1>
|
|||
|
|
<sect1 id="tips.dates">
|
|||
|
|
<title>Fechas</title>
|
|||
|
|
<para>
|
|||
|
|
Como una regla basica, siempre pase fechas al Smarty como timestamps.
|
|||
|
|
Esto permite al dise<73>ador de template utilizar
|
|||
|
|
<link linkend="language.modifier.date.format">date_format</link>
|
|||
|
|
para el control completo sobre el formato de fechas, y tambi<62>n
|
|||
|
|
facilita la comparaci<63>n de fechas si es necesario.
|
|||
|
|
</para>
|
|||
|
|
<note>
|
|||
|
|
<para>
|
|||
|
|
En el Smarty 1.4.0, usted puede parsar fechas al Smarty como
|
|||
|
|
timestamps unix,mysql, o cualquier otra fecha interpretable
|
|||
|
|
por strtotime().
|
|||
|
|
</para>
|
|||
|
|
</note>
|
|||
|
|
<example>
|
|||
|
|
<title>Usando date_format</title>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{$startDate|date_format}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
<para>
|
|||
|
|
Esta es la salida:
|
|||
|
|
</para>
|
|||
|
|
<screen>
|
|||
|
|
<![CDATA[
|
|||
|
|
Jan 4, 2001
|
|||
|
|
]]>
|
|||
|
|
</screen>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{$startDate|date_format:"%Y/%m/%d"}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
<para>
|
|||
|
|
Esta es la Salida:
|
|||
|
|
</para>
|
|||
|
|
<screen>
|
|||
|
|
<![CDATA[
|
|||
|
|
2001/01/04
|
|||
|
|
]]>
|
|||
|
|
</screen>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{if $date1 < $date2}
|
|||
|
|
...
|
|||
|
|
{/if}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
<para>
|
|||
|
|
Cuando usa {html_select_date} en un template, el programador
|
|||
|
|
normalmente va a querer convertir la salida de un formulario
|
|||
|
|
de vuelta al formato timestamp. Aqu<71> esta una funci<63>n para
|
|||
|
|
ayudar con esto.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Convirtiendo elementos en forma de fecha de vuelta a un timestamp</title>
|
|||
|
|
<programlisting role="php">
|
|||
|
|
<![CDATA[
|
|||
|
|
<?php
|
|||
|
|
// esto asume que la forma de sus elementos son nombradas como
|
|||
|
|
// startDate_Day, startDate_Month, startDate_Year
|
|||
|
|
|
|||
|
|
$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
|
|||
|
|
|
|||
|
|
function makeTimeStamp($year="", $month="", $day="")
|
|||
|
|
{
|
|||
|
|
if(empty($year)) {
|
|||
|
|
$year = strftime("%Y");
|
|||
|
|
}
|
|||
|
|
if(empty($month)) {
|
|||
|
|
$month = strftime("%m");
|
|||
|
|
}
|
|||
|
|
if(empty($day)) {
|
|||
|
|
$day = strftime("%d");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return mktime(0, 0, 0, $month, $day, $year);
|
|||
|
|
}
|
|||
|
|
?>
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
</sect1>
|
|||
|
|
<sect1 id="tips.wap">
|
|||
|
|
<title>WAP/WML</title>
|
|||
|
|
<para>
|
|||
|
|
Los templates WAP/WML requieren de un encabezado de Content-Type de
|
|||
|
|
PHP para ser pasado junto con el template. La forma mas f<>cil de
|
|||
|
|
hacer esto seria escribir una funci<63>n de manera habitual que imprima
|
|||
|
|
el encabezado. Si usted esta usando el sistema de cache, este no
|
|||
|
|
funcionara, entonces nosotros haremos esto usando una etiqueta de
|
|||
|
|
insert (recuerde que las etiquetas insert no son "cacheadas!").
|
|||
|
|
Asegurarse que no exista ninguna salida al navegador antes del template,
|
|||
|
|
de otro modo el encabezado fallara.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Usando insert para escribir un encabezado WML Content-Type</title>
|
|||
|
|
<programlisting role="php">
|
|||
|
|
<![CDATA[
|
|||
|
|
<?php
|
|||
|
|
|
|||
|
|
// Asegurarse que el apache esta configurado para las extenciones .wml !
|
|||
|
|
// ponga esta funci<63>n en algun lugar de su aplicaci<63>n, o en Smarty.addons.php
|
|||
|
|
function insert_header($params)
|
|||
|
|
{
|
|||
|
|
// this function expects $content argument
|
|||
|
|
if (empty($params['content'])) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
header($params['content']);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
?>
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
<para>
|
|||
|
|
Su template de Smarty <emphasis>debe</emphasis> comenzar con la etiqueta
|
|||
|
|
insert, como en el ejemplo:
|
|||
|
|
</para>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
{insert name=header content="Content-Type: text/vnd.wap.wml"}
|
|||
|
|
|
|||
|
|
<?xml version="1.0"?>
|
|||
|
|
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
|||
|
|
|
|||
|
|
<!-- begin new wml deck -->
|
|||
|
|
<wml>
|
|||
|
|
<!-- begin first card -->
|
|||
|
|
<card>
|
|||
|
|
<do type="accept">
|
|||
|
|
<go href="#two"/>
|
|||
|
|
</do>
|
|||
|
|
<p>
|
|||
|
|
Welcome to WAP with Smarty!
|
|||
|
|
Press OK to continue...
|
|||
|
|
</p>
|
|||
|
|
</card>
|
|||
|
|
<!-- begin second card -->
|
|||
|
|
<card id="two">
|
|||
|
|
<p>
|
|||
|
|
Pretty easy isn't it?
|
|||
|
|
</p>
|
|||
|
|
</card>
|
|||
|
|
</wml>
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
</sect1>
|
|||
|
|
<sect1 id="tips.componentized.templates">
|
|||
|
|
<title>Templates con Componetes</title>
|
|||
|
|
<para>
|
|||
|
|
Tradicionalmente, programar templates en sus aplicaciones sigue
|
|||
|
|
esta forma: Primero, usted acumula sus variables dentro de su
|
|||
|
|
aplicaci<63>n PHP, (talvez como requisiciones de una base de datos).
|
|||
|
|
Entonces, usted instancia su objeto Smarty, atribuye valores a
|
|||
|
|
las variables y muestra el template. Por ejemplo nosotros tenemos
|
|||
|
|
un registrador de existencias en nuestro template. Nosotros
|
|||
|
|
recolectaremos los datos de las existencias en nuestra aplicaci<63>n,
|
|||
|
|
entonces damos valor a estas variables en el template y lo mostramos.
|
|||
|
|
Ahora esto seria genial si usted adicionara este registrador de
|
|||
|
|
almacenamiento (stock ticker) a cualquier aplicaci<63>n simplemente
|
|||
|
|
incluyendolo en el template, y no preocuparse hacerca de como ir
|
|||
|
|
a traer los datos al frente?
|
|||
|
|
</para>
|
|||
|
|
<para>
|
|||
|
|
Usted puede escribir este plugin haciendo que traiga un
|
|||
|
|
contenido y asignarlo a la variable del template.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Templates con Componetes</title>
|
|||
|
|
<programlisting role="php">
|
|||
|
|
<![CDATA[
|
|||
|
|
<?php
|
|||
|
|
|
|||
|
|
// drop file "function.load_ticker.php" in plugin directory
|
|||
|
|
|
|||
|
|
// configura nuestra función para traer los datos almacenados
|
|||
|
|
function fetch_ticker($symbol)
|
|||
|
|
{
|
|||
|
|
// ponga la l<>gica aqu<71> que traera $ticker_name
|
|||
|
|
// y $ticker_price de algun recurso
|
|||
|
|
return $ticker_info;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function smarty_function_load_ticker($params, &$smarty)
|
|||
|
|
{
|
|||
|
|
// llama la funci<63>n
|
|||
|
|
$ticker_info = fetch_ticker($params['symbol']);
|
|||
|
|
|
|||
|
|
// asigna las variables al template
|
|||
|
|
$smarty->assign($params['assign'], $ticker_info);
|
|||
|
|
}
|
|||
|
|
?>
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
index.tpl
|
|||
|
|
---------
|
|||
|
|
|
|||
|
|
{* Smarty *}
|
|||
|
|
|
|||
|
|
{load_ticker symbol="YHOO" assign="ticker"}
|
|||
|
|
|
|||
|
|
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
</sect1>
|
|||
|
|
<sect1 id="tips.obfuscating.email">
|
|||
|
|
<title>Ofuscando direcciones de E-mail</title>
|
|||
|
|
<para>
|
|||
|
|
Usted desea saber como su direccion de E-mail consigue entrar en
|
|||
|
|
tantas listas de e-mail de spam? Una direccion unica spammers
|
|||
|
|
recolecta direcciones de E-mail y de paginas web. Para ayudar a
|
|||
|
|
combatir este problema, usted puede hacer que su direccion de
|
|||
|
|
E-mail aparesca en javascript mostrado en el codigo HTML, este
|
|||
|
|
mismo aparecera y funcionara correctamente en el navegador.
|
|||
|
|
Esto se puede hacer con el plugin mailto.
|
|||
|
|
</para>
|
|||
|
|
<example>
|
|||
|
|
<title>Ejemplo de ofuscamiento de una direccion de E-mail</title>
|
|||
|
|
<programlisting>
|
|||
|
|
<![CDATA[
|
|||
|
|
index.tpl
|
|||
|
|
---------
|
|||
|
|
|
|||
|
|
Send inquiries to
|
|||
|
|
{mailto address=$EmailAddress encode="javascript" subject="Hello"}
|
|||
|
|
]]>
|
|||
|
|
</programlisting>
|
|||
|
|
</example>
|
|||
|
|
<note>
|
|||
|
|
<title>Nota T<>cnica</title>
|
|||
|
|
<para>
|
|||
|
|
Este metodo no es 100% a pueba de fallas. Un spammer podr<64>a crear
|
|||
|
|
un programa para recolectar el e-mail y para decodificar estos
|
|||
|
|
valores, mas no es muy com<6F>n.
|
|||
|
|
</para>
|
|||
|
|
</note>
|
|||
|
|
</sect1>
|
|||
|
|
</chapter>
|
|||
|
|
<!-- Keep this comment at the end of the file
|
|||
|
|
Local variables:
|
|||
|
|
mode: sgml
|
|||
|
|
sgml-omittag:t
|
|||
|
|
sgml-shorttag:t
|
|||
|
|
sgml-minimize-attributes:nil
|
|||
|
|
sgml-always-quote-attributes:t
|
|||
|
|
sgml-indent-step:1
|
|||
|
|
sgml-indent-data:t
|
|||
|
|
indent-tabs-mode:nil
|
|||
|
|
sgml-parent-document:nil
|
|||
|
|
sgml-default-dtd-file:"../../../../manual.ced"
|
|||
|
|
sgml-exposed-tags:nil
|
|||
|
|
sgml-local-catalogs:nil
|
|||
|
|
sgml-local-ecat-files:nil
|
|||
|
|
End:
|
|||
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|||
|
|
vim: et tw=78 syn=sgml
|
|||
|
|
vi: ts=1 sw=1
|
|||
|
|
-->
|