PageRenderTime 54ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/documentation/es/appendixes/tips.xml

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