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

434 lines
13 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
<link linkend="language.function.if">{if}</link> para manejar esto,
mas existe otra forma con Smarty, usando el modificador de la variable
<link linkend="language.modifier.default"><emphasis>default</emphasis></link>.
2004-10-07 18:50:52 +00:00
</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>
<para>
Ver tambien <link linkend="language.modifier.default">default</link>
y <link linkend="tips.default.var.handling">Default Variable Handling</link>.
</para>
2004-10-07 18:50:52 +00:00
</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>.
2004-10-07 18:50:52 +00:00
</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>
<para>
Vea tambi<62>en <link linkend="language.modifier.default">default</link> y
<link linkend="tips.blank.var.handling">Blank Variable Handling</link>.
</para>
2004-10-07 18:50:52 +00:00
</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 <link linkend="language.function.include">{include}</link>.
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.
2004-10-07 18:50:52 +00:00
</para>
<example>
<title>Pasando la variable titulo al encabezado del template</title>
<para>
<filename>mainpage.tpl</filename>
</para>
2004-10-07 18:50:52 +00:00
<programlisting>
<![CDATA[
{include file="header.tpl" title="Main Page"}
{* template body goes here *}
2004-10-07 18:50:52 +00:00
{include file="footer.tpl"}
]]>
</programlisting>
<para>
<filename>archives.tpl</filename>
</para>
<programlisting>
<![CDATA[
2004-10-07 18:50:52 +00:00
{config_load file="archive_page.conf"}
{include file="header.tpl" title=#archivePageTitle#}
{* template body goes here *}
2004-10-07 18:50:52 +00:00
{include file="footer.tpl"}
]]>
</programlisting>
<para>
<filename>header.tpl</filename>
</para>
<programlisting>
<![CDATA[
<html>
<head>
<title>{$title|default:"BC News"}</title>
</head>
<body>
]]>
</programlisting>
<para>
<filename>footer.tpl</filename>
</para>
<programlisting>
<![CDATA[
</body>
</html>
2004-10-07 18:50:52 +00:00
]]>
</programlisting>
</example>
<para>
Cuando la pagina principal es mostrada, el titulo de la "P<>gina
Principal" es pasado al template <filename>header.tpl</filename>,
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
<filename>archives_page.conf</filename> 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
<link linkend="language.modifier.default">default</link>.
2004-10-07 18:50:52 +00:00
</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 <ulink url="&url.php-manual;strtotime">strtotime()</ulink>.
2004-10-07 18:50:52 +00:00
</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 <link linkend="language.function.html.select.date">{html_select_date}</link>
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.
2004-10-07 18:50:52 +00:00
</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>
<para>
Vea tambi<62>n
<link linkend="language.function.html.select.date">{html_select_date}</link>,
<link linkend="language.function.html.select.time">{html_select_time}</link>,
<link linkend="language.modifier.date.format">date_format</link>
y <link linkend="language.variables.smarty.now">$smarty.now</link>,
</para>
2004-10-07 18:50:52 +00:00
</sect1>
<sect1 id="tips.wap">
<title>WAP/WML</title>
<para>
Los templates WAP/WML requieren de un encabezado de
<ulink url="&url.php-manual;header">Content-Type</ulink> de
2004-10-07 18:50:52 +00:00
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
<link linkend="caching">cache</link>, este no funcionara, entonces
nosotros haremos esto usando una etiqueta de
<link linkend="language.function.insert">{insert}</link> (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.
2004-10-07 18:50:52 +00:00
</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 es de
la siguiente forma: Primero, usted acumula sus variables dentro de su
2004-10-07 18:50:52 +00:00
aplicaci<63>n PHP, (talvez como requisiciones de una base de datos).
Entonces, usted instancia su objeto Smarty
<link linkend="api.assign">assign()</link>, atribuye valores a
las variables y muestra el template
<link linkend="api.display">display()</link>. Por ejemplo nosotros
tenemos un registrador de existencias en nuestro template. Nosotros
2004-10-07 18:50:52 +00:00
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>
<para>
<filename>function.load_ticker.php</filename> -
deja el archivo en
<link linkend="variable.plugins.dir">$plugins directory</link>
</para>
2004-10-07 18:50:52 +00:00
<programlisting role="php">
<![CDATA[
<?php
// deja el archivo "function.load_ticker.php" en el directorio de plugins
2004-10-07 18:50:52 +00:00
// 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>
<para>
<filename>index.tpl</filename>
</para>
2004-10-07 18:50:52 +00:00
<programlisting>
<![CDATA[
{load_ticker symbol="YHOO" assign="ticker"}
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
]]>
</programlisting>
</example>
<para>
Vea tambi<62>n <link linkend="language.function.include.php">{include_php}</link>,
<link linkend="language.function.include">{include}</link> y
<link linkend="language.function.php">{php}</link>.
</para>
2004-10-07 18:50:52 +00:00
</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
<link linkend="language.function.mailto">{mailto}</link>.
2004-10-07 18:50:52 +00:00
</para>
<example>
<title>Ejemplo de ofuscamiento de una direccion de E-mail</title>
<programlisting>
<![CDATA[
{* in index.tpl *}
2004-10-07 18:50:52 +00:00
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>
<para>
Vea tambi<62>n <link linkend="language.modifier.escape">escape</link>
y <link linkend="language.function.mailto">{mailto}</link>.
</para>
2004-10-07 18:50:52 +00:00
</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
-->