PageRenderTime 66ms CodeModel.GetById 38ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 1ms

/docs/es/appendixes/tips.xml

https://github.com/pop/smarty
XML | 433 lines | 385 code | 24 blank | 24 comment | 0 complexity | b32e322ca81ec811de8fe0c09ae6a93e MD5 | raw file
  1<?xml version="1.0" encoding="UTF-8"?>
  2<!-- $Revision$ -->
  3 <chapter id="tips">
  4  <title>Consejos y Trucos</title>
  5  <para>
  6  </para>
  7  <sect1 id="tips.blank.var.handling">
  8   <title>Manipulación de Variables Vacias</title>
  9   <para>
 10    Cuando usted en algunas ocaciones quiere imprimir un valor que 
 11    usted defíne a una variable vacia en vez de imprimir nada, tal 
 12    como imprimir "&amp;nbsp;" a fin de que el plano del fondo de 
 13    la tabla funcione correctamente. Muchos usarian una sentencia 
 14    <link linkend="language.function.if">{if}</link> para manejar esto, 
 15    mas existe otra forma con Smarty, usando el modificador de la variable 
 16    <link linkend="language.modifier.default"><emphasis>default</emphasis></link>.
 17   </para>
 18   <example>
 19    <title>Imprimiendo &amp;nbsp; cuando una variable esta vacia</title>
 20    <programlisting>
 21<![CDATA[
 22{* the long way *}
 23
 24{if $title eq ""}
 25   &nbsp;
 26{else}
 27   {$title}
 28{/if}
 29
 30
 31{* the short way *}
 32
 33{$title|default:"&nbsp;"}
 34]]>
 35    </programlisting>
 36   </example>
 37   <para>
 38     Ver tambien <link linkend="language.modifier.default">default</link>
 39     y <link linkend="tips.default.var.handling">Default Variable Handling</link>.
 40   </para>
 41  </sect1>
 42
 43  <sect1 id="tips.default.var.handling">
 44   <title>Manipulación del valor default de una variable</title>
 45   <para>
 46    Si una variable es usada frecuentemente en sus templates, 
 47    aplicando el modificador default toda vez que este es 
 48    mencionado puede evitar un bit desagradable. Usted puede 
 49    remediar esto con la atribución de un valor por default a 
 50    la variable con la función 
 51    <link linkend="language.function.assign">{assign}</link>.
 52   </para>
 53   <example>
 54    <title>Atribuyendo el valor por default a una variable en el template</title>
 55    <programlisting>
 56<![CDATA[
 57{* ponga esto en algun lugar en la parte de arriba de su template *}
 58{assign var="title" value=$title|default:"no title"}
 59
 60{* Si el $titulo estaba vacio, este ahora tendra el valor "sin titulo" cuando
 61usted lo exiba *}
 62{$title}
 63]]>
 64    </programlisting>
 65   </example>
 66   <para>
 67    Vea tambiéen <link linkend="language.modifier.default">default</link> y
 68    <link linkend="tips.blank.var.handling">Blank Variable Handling</link>.
 69   </para>
 70
 71  </sect1>
 72  <sect1 id="tips.passing.vars">
 73   <title>Pasando la variable titulo a la cabecera del template</title>
 74   <para>
 75    Cuando la mayoria de sus templates usan los mismo encabezados y 
 76    los mismos pies de pagina, es común dividirlos uno en cada template 
 77    y entonces incluirlos <link linkend="language.function.include">{include}</link>. 
 78    Que pasara si el encabezado necesita tener un titulo diferente, 
 79    dependiendo de que pagina estas viniendo? usted puede pasar el 
 80    titulo en el encabezado cuando este es incluido.
 81   </para>
 82   <example>
 83    <title>Pasando la variable titulo al encabezado del template</title>
 84    <para>
 85    <filename>mainpage.tpl</filename>
 86    </para>
 87    <programlisting>
 88<![CDATA[
 89
 90{include file="header.tpl" title="Main Page"}
 91{* template body goes here *}
 92{include file="footer.tpl"}
 93]]>
 94    </programlisting>
 95    <para>
 96    <filename>archives.tpl</filename>
 97    </para>
 98    <programlisting>
 99<![CDATA[
100
101{config_load file="archive_page.conf"}
102{include file="header.tpl" title=#archivePageTitle#}
103{* template body goes here *}
104{include file="footer.tpl"}
105]]>
106    </programlisting>
107    <para>
108    <filename>header.tpl</filename>
109    </para>
110    <programlisting>
111<![CDATA[
112<html>
113<head>
114<title>{$title|default:"BC News"}</title>
115</head>
116<body>
117]]>
118    </programlisting>
119    <para>
120    <filename>footer.tpl</filename>
121    </para>
122    <programlisting>
123<![CDATA[
124</body>
125</html>
126]]>
127    </programlisting>
128   </example>
129   <para>
130   Cuando la pagina principal es mostrada, el titulo de la "Página 
131   Principal" es pasado al template <filename>header.tpl</filename>, 
132   y será posteriormente usado como el titulo. Cuando la pagina de archivo 
133   es mostrada, el titulo sera "Archivos". Observelo en el ejemplo de archivo, 
134   nosotros estamos usando una variable del archivo 
135   <filename>archives_page.conf</filename> en vez de una variable codificada 
136   rigida. Tambien note que "BC news" es mostrada si la variable $titulo no 
137   esta definida, usando el modificador de la variable 
138   <link linkend="language.modifier.default">default</link>.
139   </para>
140  </sect1>
141  <sect1 id="tips.dates">
142   <title>Fechas</title>
143   <para>
144    Como una regla basica, siempre pase fechas al Smarty como timestamps.
145    Esto permite al diseńador de template utilizar
146    <link linkend="language.modifier.date.format">date_format</link>
147    para el control completo sobre el formato de fechas, y también 
148    facilita la comparación de fechas si es necesario.
149   </para>
150   <note>
151    <para>
152     En el Smarty 1.4.0, usted puede parsar fechas al Smarty como 
153     timestamps unix,mysql, o cualquier otra fecha interpretable 
154     por <ulink url="&url.php-manual;strtotime">strtotime()</ulink>.
155    </para>
156   </note>
157   <example>
158    <title>Usando date_format</title>
159    <programlisting>
160<![CDATA[
161{$startDate|date_format}
162]]>
163    </programlisting>
164    <para>
165     Esta es la salida:
166    </para>
167    <screen>
168<![CDATA[
169Jan 4, 2001
170]]>
171    </screen>
172    <programlisting>
173<![CDATA[
174{$startDate|date_format:"%Y/%m/%d"}
175]]>
176    </programlisting>
177    <para>
178     Esta es la Salida:
179    </para>
180    <screen>
181<![CDATA[
1822001/01/04
183]]>
184    </screen>
185    <programlisting>
186<![CDATA[
187{if $date1 < $date2}
188   ...
189{/if}
190]]>
191    </programlisting>
192   </example>
193   <para>
194    Cuando usa <link linkend="language.function.html.select.date">{html_select_date}</link> 
195    en un template, el programador normalmente va a querer convertir 
196    la salida de un formulario de vuelta al formato timestamp. Aquí 
197    esta una función para ayudar con esto.
198   </para>
199   <example>
200    <title>Convirtiendo elementos en forma de fecha de vuelta a un timestamp</title>
201    <programlisting role="php">
202<![CDATA[
203<?php
204// esto asume que la forma de sus elementos son nombradas como
205// startDate_Day, startDate_Month, startDate_Year
206
207$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
208
209function makeTimeStamp($year="", $month="", $day="")
210{
211   if(empty($year)) {
212       $year = strftime("%Y");
213   }
214   if(empty($month)) {
215       $month = strftime("%m");
216   }
217   if(empty($day)) {
218       $day = strftime("%d");
219   }
220
221   return mktime(0, 0, 0, $month, $day, $year);
222}
223?>
224]]>
225    </programlisting>
226   </example>
227   <para>
228   Vea también 
229   <link linkend="language.function.html.select.date">{html_select_date}</link>,
230   <link linkend="language.function.html.select.time">{html_select_time}</link>,
231   <link linkend="language.modifier.date.format">date_format</link>
232   y <link linkend="language.variables.smarty.now">$smarty.now</link>,
233   </para>
234
235  </sect1>
236  <sect1 id="tips.wap">
237   <title>WAP/WML</title>
238   <para>
239    Los templates WAP/WML requieren de un encabezado de 
240    <ulink url="&url.php-manual;header">Content-Type</ulink> de 
241    PHP para ser pasado junto con el template. La forma mas fácil de 
242    hacer esto seria escribir una función de manera habitual que imprima 
243    el encabezado. Si usted esta usando el sistema de  
244    <link linkend="caching">cache</link>, este no funcionara, entonces 
245    nosotros haremos esto usando una etiqueta de 
246    <link linkend="language.function.insert">{insert}</link> (recuerde que 
247    las etiquetas insert no son "cacheadas!"). Asegurarse que no exista 
248    ninguna salida al navegador antes del template, de otro modo el encabezado fallara.
249   </para>
250   <example>
251    <title>Usando insert para escribir un encabezado WML Content-Type</title>
252    <programlisting role="php">
253<![CDATA[
254<?php
255
256// Asegurarse que el apache esta configurado para las extenciones .wml !
257// ponga esta función en algun lugar de su aplicación, o en Smarty.addons.php
258function insert_header($params) 
259{
260   // this function expects $content argument
261   if (empty($params['content'])) {
262       return;
263   }
264   header($params['content']);
265   return;
266}
267
268?>
269]]>
270    </programlisting>
271    <para>
272     Su template de Smarty <emphasis>debe</emphasis> comenzar con la etiqueta
273     insert, como en el ejemplo:
274    </para>
275    <programlisting>
276<![CDATA[
277{insert name=header content="Content-Type: text/vnd.wap.wml"}
278
279<?xml version="1.0"?>  
280<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> 
281
282<!-- begin new wml deck --> 
283<wml> 
284<!-- begin first card --> 
285<card> 
286<do type="accept"> 
287<go href="#two"/> 
288</do>  
289<p> 
290Welcome to WAP with Smarty!
291Press OK to continue...  
292</p> 
293</card>  
294<!-- begin second card --> 
295<card id="two">  
296<p> 
297Pretty easy isn't it?
298</p> 
299</card> 
300</wml>
301]]>
302    </programlisting>
303   </example>
304  </sect1>
305  <sect1 id="tips.componentized.templates">
306   <title>Templates con Componetes</title>
307   <para>
308    Tradicionalmente, programar templates en sus aplicaciones es de  
309    la siguiente forma: Primero, usted acumula sus variables dentro de su 
310    aplicación PHP, (talvez como requisiciones de una base de datos).
311    Entonces, usted instancia su objeto Smarty 
312    <link linkend="api.assign">assign()</link>, atribuye valores a 
313    las variables y muestra el template 
314    <link linkend="api.display">display()</link>. Por ejemplo nosotros 
315    tenemos un registrador de existencias en nuestro template. Nosotros 
316    recolectaremos los datos de las existencias en nuestra aplicación,
317    entonces damos valor a estas variables en el template y lo mostramos.
318    Ahora esto seria genial si usted adicionara este registrador de
319    almacenamiento (stock ticker) a cualquier aplicación simplemente
320    incluyendolo en el template, y no preocuparse hacerca de como ir
321    a traer los datos al frente?
322   </para>
323   <para>
324    Usted puede escribir este plugin haciendo que traiga un  
325    contenido y asignarlo a la variable del template.
326   </para>
327   <example>
328    <title>Templates con Componetes</title>
329    <para>
330      <filename>function.load_ticker.php</filename> -
331      deja el archivo en 
332      <link linkend="variable.plugins.dir">$plugins directory</link>
333    </para>
334    <programlisting role="php">
335<![CDATA[
336<?php
337
338// deja el archivo "function.load_ticker.php" en el directorio de plugins
339
340// configura nuestra funci&oacute;n para traer los datos almacenados
341function fetch_ticker($symbol) 
342{
343   // ponga la lógica aquí que traera $ticker_name
344   // y $ticker_price de algun recurso
345   return $ticker_info;
346}
347
348function smarty_function_load_ticker($params, &$smarty) 
349{
350   // llama la función
351   $ticker_info = fetch_ticker($params['symbol']);
352   
353   // asigna las variables al template
354   $smarty->assign($params['assign'], $ticker_info);
355}
356?>
357]]>
358    </programlisting>
359    <para>
360          <filename>index.tpl</filename>
361    </para>
362    <programlisting>
363<![CDATA[
364{load_ticker symbol="YHOO" assign="ticker"}
365
366Stock Name: {$ticker.name} Stock Price: {$ticker.price}
367]]>
368    </programlisting>
369   </example>
370   <para>
371    Vea también <link linkend="language.function.include.php">{include_php}</link>,
372    <link linkend="language.function.include">{include}</link> y
373    <link linkend="language.function.php">{php}</link>.
374   </para>
375
376  </sect1>
377  <sect1 id="tips.obfuscating.email">
378   <title>Ofuscando direcciones de E-mail</title>
379   <para>
380    Usted desea saber como su direccion de E-mail consigue entrar en 
381    tantas listas de e-mail de spam? Una direccion unica spammers 
382    recolecta direcciones de E-mail y de paginas web. Para ayudar a 
383    combatir este problema, usted puede hacer que su direccion de 
384    E-mail aparesca en javascript mostrado en el codigo HTML, este 
385    mismo aparecera y funcionara correctamente en el navegador. 
386    Esto se puede hacer con el plugin  
387    <link linkend="language.function.mailto">{mailto}</link>.
388   </para>
389   <example>
390    <title>Ejemplo de ofuscamiento de una direccion de E-mail</title>
391    <programlisting>
392<![CDATA[
393{* in index.tpl *}
394
395Send inquiries to
396{mailto address=$EmailAddress encode="javascript" subject="Hello"}
397]]>
398    </programlisting>
399   </example>
400   <note>
401    <title>Nota Técnica</title>
402    <para>
403     Este metodo no es 100% a pueba de fallas. Un spammer podría crear
404     un programa para recolectar el e-mail y para decodificar estos 
405     valores, mas no es muy común.
406    </para>
407   </note>
408   <para>
409    Vea también <link linkend="language.modifier.escape">escape</link>
410    y <link linkend="language.function.mailto">{mailto}</link>.
411   </para>
412  </sect1>
413</chapter>
414<!-- Keep this comment at the end of the file
415Local variables:
416mode: sgml
417sgml-omittag:t
418sgml-shorttag:t
419sgml-minimize-attributes:nil
420sgml-always-quote-attributes:t
421sgml-indent-step:1
422sgml-indent-data:t
423indent-tabs-mode:nil
424sgml-parent-document:nil
425sgml-default-dtd-file:"../../../../manual.ced"
426sgml-exposed-tags:nil
427sgml-local-catalogs:nil
428sgml-local-ecat-files:nil
429End:
430vim600: syn=xml fen fdm=syntax fdl=2 si
431vim: et tw=78 syn=sgml
432vi: ts=1 sw=1
433-->