Files
smarty/docs/es/appendixes/tips.xml

387 lines
10 KiB
XML
Raw Normal View History

2004-10-07 18:50:52 +00:00
<?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 "&amp;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 &amp;nbsp; cuando una variable esta vacia</title>
<programlisting>
<![CDATA[
{* the long way *}
{if $title eq ""}
&nbsp;
{else}
{$title}
{/if}
{* the short way *}
{$title|default:"&nbsp;"}
]]>
</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&oacute;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
-->