/docs/es/appendixes/tips.xml
XML | 433 lines | 385 code | 24 blank | 24 comment | 0 complexity | b32e322ca81ec811de8fe0c09ae6a93e MD5 | raw file
Possible License(s): LGPL-2.1
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- $Revision$ -->
- <chapter id="tips">
- <title>Consejos y Trucos</title>
- <para>
- </para>
- <sect1 id="tips.blank.var.handling">
- <title>Manipulación de Variables Vacias</title>
- <para>
- Cuando usted en algunas ocaciones quiere imprimir un valor que
- usted defí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
- <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>.
- </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>
- <para>
- Ver tambien <link linkend="language.modifier.default">default</link>
- y <link linkend="tips.default.var.handling">Default Variable Handling</link>.
- </para>
- </sect1>
- <sect1 id="tips.default.var.handling">
- <title>Manipulació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ón de un valor por default a
- la variable con la funció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>
- <para>
- Vea tambiéen <link linkend="language.modifier.default">default</link> y
- <link linkend="tips.blank.var.handling">Blank Variable Handling</link>.
- </para>
- </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ú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.
- </para>
- <example>
- <title>Pasando la variable titulo al encabezado del template</title>
- <para>
- <filename>mainpage.tpl</filename>
- </para>
- <programlisting>
- <![CDATA[
- {include file="header.tpl" title="Main Page"}
- {* template body goes here *}
- {include file="footer.tpl"}
- ]]>
- </programlisting>
- <para>
- <filename>archives.tpl</filename>
- </para>
- <programlisting>
- <![CDATA[
- {config_load file="archive_page.conf"}
- {include file="header.tpl" title=#archivePageTitle#}
- {* template body goes here *}
- {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>
- ]]>
- </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á 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>.
- </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ńador de template utilizar
- <link linkend="language.modifier.date.format">date_format</link>
- para el control completo sobre el formato de fechas, y también
- facilita la comparació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>.
- </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í
- esta una funció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>
- <para>
- Vea tambié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>
- </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
- PHP para ser pasado junto con el template. La forma mas fácil de
- hacer esto seria escribir una funció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.
- </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ón en algun lugar de su aplicació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
- aplicació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
- recolectaremos los datos de las existencias en nuestra aplicació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ó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>
- <programlisting role="php">
- <![CDATA[
- <?php
- // deja el archivo "function.load_ticker.php" en el directorio de plugins
- // configura nuestra función para traer los datos almacenados
- function fetch_ticker($symbol)
- {
- // ponga la lógica aquí que traera $ticker_name
- // y $ticker_price de algun recurso
- return $ticker_info;
- }
- function smarty_function_load_ticker($params, &$smarty)
- {
- // llama la funció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>
- <programlisting>
- <![CDATA[
- {load_ticker symbol="YHOO" assign="ticker"}
- Stock Name: {$ticker.name} Stock Price: {$ticker.price}
- ]]>
- </programlisting>
- </example>
- <para>
- Vea tambié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>
- </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>.
- </para>
- <example>
- <title>Ejemplo de ofuscamiento de una direccion de E-mail</title>
- <programlisting>
- <![CDATA[
- {* in 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ía crear
- un programa para recolectar el e-mail y para decodificar estos
- valores, mas no es muy común.
- </para>
- </note>
- <para>
- Vea también <link linkend="language.modifier.escape">escape</link>
- y <link linkend="language.function.mailto">{mailto}</link>.
- </para>
- </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
- -->