PageRenderTime 61ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/documentation/pt_BR/getting-started.xml

https://bitbucket.org/hallgrennetworks/smarty
XML | 521 lines | 502 code | 11 blank | 8 comment | 0 complexity | 339b2dd0d7e95fd8f12d3879460054a0 MD5 | raw file
Possible License(s): LGPL-3.0
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 1.13 Maintainer: fernandoc Status: ready -->
  3. <part id="getting.started">
  4. <title>Iniciando</title>
  5. <chapter id="what.is.smarty">
  6. <title>O que é o Smarty?</title>
  7. <para>
  8. O Smarty é um sistema de templates para PHP. Mais especificamente, ele fornece uma maneira
  9. fácil de controlar a separação da aplicação lógica e o conteúdo de sua apresentação. Isto é
  10. melhor descrito em uma situação onde o programador da aplicação e o designer do template executam
  11. diferentes funções, ou na maioria dos casos não são a mesma pessoa.
  12. </para>
  13. <para>
  14. Por exemplo, digamos que você
  15. está criando uma página para web para mostrar um artigo de um jornal. O autor, a manchete,
  16. a conclusão e o corpo do artigo são elementos de conteúdo, eles não contém informação alguma
  17. sobre como eles devem ser mostrados. Ele são enviados ao Smarty pela aplicação, então o designer
  18. do template edita o template e usa uma combinação de tags HTML e tags de templates para formatar
  19. a apresentação destes elementos (tabelas HTML, cores de fundo, tamanhos de fontes, folhas de estilos, etc.).
  20. Se algum dia o programador precisar alterar a maneira como o conteúdo do artigo é tratado (uma mudança na
  21. lógica da aplicação). Esta mudança não afeta o design do template, o conteúdo será enviado ao template
  22. exatamente da mesma forma. De modo semelhante, se o designer do template quiser redesenhar completamente
  23. os templates, não é necessária nenhuma alteração na lógica da aplicação. Sendo assim, o programador
  24. pode fazer mudanças na lógica da aplicação sem a necessidade de reestruturar os templates, e o designer
  25. do template pode fazer mudanças nos templates sem alterar a lógica da aplicação.
  26. </para>
  27. <para>
  28. Um objetivo do projeto Smarty é a separação da lógica do negócio e da lógica da apresentação.
  29. Isto significa que os templates podem certamente conter a lógica sob a circunstância que é somente
  30. para apresentação. Alguns exemplos são: a inclusão de outros templates, alternação de cores nas linhas
  31. das tabelas, colocar o texto de uma variável em maiúsculo, percorrer uma matriz de dados e mostrá-la, etc.
  32. são todos exemplos de apresentação lógica. Isto não significa que o Smarty força a separação da lógica de
  33. negócios e da lógica de apresentação. O Smarty não tem conhecimento do que é o que em sua aplicação, portanto
  34. colocar sua a lógica de negócio no template é problema seu. Caso você deseje que não haja <emphasis>nenhuma</emphasis> lógica
  35. em seus templates você pode certamente fazer isso trocando o conteúdo para textos e variáveis somente.
  36. <!-- ficou legal o texto abaixo, mas não segue exatamente toda tradução, espero aprovação do meu acima, ou mistura entre os dois:
  37. Agora um resumo sobre o que o Smarty faz e NÃO faz. O Smarty não tenta separar completamente
  38. a lógica dos templates. Não problema com a lógica em seus templates sob a condição de que
  39. esta lógica seja estritamente para apresentação. Uma palavra de aviso: mantenha a lógica
  40. fora dos templates, e a lógica da apresentação fora da aplicação. Isto definitivamente
  41. manterá as coisas mais manipuláveis
  42. e escaláveis para o futuro próximo. -->
  43. </para>
  44. <para>
  45. Um dos aspectos únicos do Smarty é seu sistema de compilação de templates. O Smarty os arquivos
  46. de templates e cria scripts PHP à partir deles. Uma vez criados, eles são executados sem ser necessário
  47. uma outra compilação do template novamente. Com isso, os arquivos de template não são 'parseados'(analisados)
  48. toda vez que um template é solicitado, e cada template tem a total vantagem de soluções de cache do
  49. compilador PHP, tais como: Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou PHP Accelerator
  50. (<ulink url="&url.ion-accel;">&url.ion-accel;</ulink>).
  51. </para>
  52. <para>
  53. Algumas das características do Smarty:
  54. </para>
  55. <itemizedlist>
  56. <listitem>
  57. <para>
  58. Ele é extremamente rápido.
  59. </para>
  60. </listitem>
  61. <listitem>
  62. <para>
  63. Ele é eficiente visto que o interpretador do PHP faz o trabalho mais pesado.
  64. </para>
  65. </listitem>
  66. <listitem>
  67. <para>
  68. Sem elevadas interpretações de template, apenas compila uma vez.
  69. </para>
  70. </listitem>
  71. <listitem>
  72. <para>
  73. Ele está atento para recompilar os arquivos de template que foram mudados.
  74. </para>
  75. </listitem>
  76. <listitem>
  77. <para>
  78. Você pode fazer <link linkend="language.custom.functions">funções próprias</link>
  79. e seus próprios <link linkend="language.modifiers">modificadores de variáveis</link>, assim
  80. a linguagem de templates é extremamente extensível.
  81. </para>
  82. </listitem>
  83. <listitem>
  84. <para>
  85. <link linkend="variable.left.delimiter">Delimitadores de tag</link>
  86. configuráveis, sendo assim você pode usar {}, {{}}, &lt;!--{}--&gt;, etc.
  87. </para>
  88. </listitem>
  89. <listitem>
  90. <para>
  91. Os construtores <link linkend="language.function.if">if/elseif/else/endif</link> são passados
  92. para o interpretador de PHP, assim a sintaxe de expressão {if ...} pode ser tanto simples quanto
  93. complexa da forma que você queira.
  94. </para>
  95. </listitem>
  96. <listitem>
  97. <para>
  98. Aninhamento ilimitado de <link linkend="language.function.section">sections</link>,
  99. ifs, etc. permitidos.
  100. </para>
  101. </listitem>
  102. <listitem>
  103. <para>
  104. É possível <link linkend="language.function.php">embutir o código PHP</link> diretamente em
  105. seus arquivos de template, apesar de que isto pode não ser necessário (não recomendado) visto que a
  106. ferramenta é tão customizável.
  107. </para>
  108. </listitem>
  109. <listitem>
  110. <para>
  111. Suporte de <link linkend="caching">caching embutido</link>.
  112. </para>
  113. </listitem>
  114. <listitem>
  115. <para>
  116. <link linkend="template.resources">Fontes de template</link> arbitrários.
  117. </para>
  118. </listitem>
  119. <listitem>
  120. <para>
  121. Funções de <link linkend="section.template.cache.handler.func">manipulação
  122. de cache</link> customizadas.
  123. </para>
  124. </listitem>
  125. <listitem>
  126. <para>
  127. <link linkend="plugins">Arquitetura de Plugin</link>.
  128. </para>
  129. </listitem>
  130. </itemizedlist>
  131. </chapter>
  132. <chapter id="installation">
  133. <title>Instalação</title>
  134. <sect1 id="installation.requirements">
  135. <title>Requisitos</title>
  136. <para>
  137. Smarty requer um servidor web rodando o PHP 4.0.6 superior.
  138. </para>
  139. </sect1>
  140. <sect1 id="installing.smarty.basic">
  141. <title>Instalação Básica</title>
  142. <para>
  143. Instale os arquivos da biblioteca do Smarty que estão no subdiretório /libs/ da
  144. distribuição. Estes são os arquivos PHP que você NÃO PRECISA editar. Eles são comuns
  145. a todas as aplicações e eles são atualizados quando você atualiza para uma nova
  146. versão do Smarty.
  147. </para>
  148. <example>
  149. <title>Arquivos da biblioteca do Smarty necessários</title>
  150. <screen>
  151. Smarty.class.php
  152. Smarty_Compiler.class.php
  153. Config_File.class.php
  154. debug.tpl
  155. /internals/*.php (all of them)
  156. /plugins/*.php (todos eles para ser seguro, talvés a sua pagina precise de apenas alguns)
  157. </screen>
  158. </example>
  159. <para>
  160. O Smarty utiliza uma <ulink url="&url.php-manual;define">constante</ulink> do PHP chamada
  161. <link linkend="constant.smarty.dir">SMARTY_DIR</link> que é o
  162. <emphasis role="bold">caminho completo</emphasis> para o diretório 'libs/' do Smarty.
  163. Basicamente, se sua aplicação puder encontrar o arquivo
  164. <filename>Smarty.class.php</filename>, você não precisa
  165. definir <link linkend="constant.smarty.dir">SMARTY_DIR</link>,
  166. o Smarty irá encontrar por si só. Entretanto, se
  167. <filename>Smarty.class.php</filename> não estiver em seu include_path, ou você
  168. não indicar um caminho absoluto para ele em sua aplicação, então você
  169. deverá definir SMARTY_DIR manualmente. SMARTY_DIR <emphasis role="bold">deve incluir uma
  170. barra ao final</emphasis>.
  171. </para>
  172. <para>
  173. Aqui está um exemplo de como você cria uma instância do Smarty em seus scripts PHP:
  174. </para>
  175. <example>
  176. <title>Cria uma instância do Smarty</title>
  177. <screen>
  178. NOTE: Smarty has a capital 'S'
  179. require_once('Smarty.class.php');
  180. $smarty = new Smarty();
  181. </screen>
  182. </example>
  183. <para>
  184. Tente rodar o script acima. Se você obtiver um erro dizendo que o arquivo
  185. <filename>Smarty.class.php</filename> não pôde ser encontrado, você tem que fazer uma
  186. das coisas a seguir:
  187. </para>
  188. <example>
  189. <title>Definir a constante SMARTY_DIR manualmente</title>
  190. <screen>
  191. // *nix style (note capital 'S')
  192. define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
  193. // windows style
  194. define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
  195. // hack version example that works on both *nix and windows
  196. // Smarty is assumend to be in 'includes/' dir under current script
  197. define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
  198. require_once(SMARTY_DIR . 'Smarty.class.php');
  199. $smarty = new Smarty();
  200. </screen>
  201. </example>
  202. <example>
  203. <title>Adicionar o diretório da biblioteca para o include_path do PHP</title>
  204. <screen>
  205. // Edite o seu arquivo php.ini, adicione o diretório da biblioteca do Smarty
  206. // para o include_path e reinicie o servidor web.
  207. // Então o código a seguir funcionaria:
  208. require('Smarty.class.php');
  209. $smarty = new Smarty;
  210. </screen>
  211. </example>
  212. <example>
  213. <title>Defina a constante SMARTY_DIR manualmente</title>
  214. <screen>
  215. define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
  216. require(SMARTY_DIR.'Smarty.class.php');
  217. $smarty = new Smarty;
  218. </screen>
  219. </example>
  220. <para>
  221. Agora que os arquivos da biblioteca estão no lugar, é hora de configurar os diretórios
  222. do Smarty para a sua aplicação.
  223. </para>
  224. <para>
  225. O Smarty necessita de quatro diretórios, que são chamados
  226. por padrão <filename class="directory">'templates/'</filename>,
  227. <filename class="directory">'templates_c/'</filename>, <filename
  228. class="directory">'configs/'</filename> e <filename
  229. class="directory">'cache/'</filename>.
  230. </para>
  231. <para>
  232. Cada um deles pode ser definido
  233. pelas propriedades da classe Smarty
  234. <link linkend="variable.template.dir">
  235. <varname>$template_dir</varname></link>,
  236. <link linkend="variable.compile.dir">
  237. <varname>$compile_dir</varname></link>,
  238. <link linkend="variable.config.dir">
  239. <varname>$config_dir</varname></link>, e
  240. <link linkend="variable.cache.dir">
  241. <varname>$cache_dir</varname></link> repectivamente.
  242. É altamente recomendado que
  243. você configure um conjunto diferente destes diretórios para cada aplicação
  244. que for usar o Smarty.
  245. </para>
  246. <para>
  247. Certifique-se que você sabe a localização do 'document root' do seu servidor web. Em nosso exemplo,
  248. o 'document root' é <filename class="directory">"/web/www.mydomain.com/docs/"</filename>. Os diretórios do Smarty
  249. só são acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Então para
  250. evitar qualquer preocupação com segurança, é recomendado colocar estes diretórios
  251. <emphasis>fora</emphasis> do document root.
  252. </para>
  253. <para>
  254. Para o nosso exemplo de instalação, nós estaremos configurando o ambiente do Smarty
  255. para uma aplicação de livro de visitas. Nós escolhemos uma aplicação só para o propósito
  256. de uma convenção de nomeação de diretório. Você pode usar o mesmo ambiente para qualquer
  257. aplicação, apenas substitua "guestbook" com o nome de sua aplicação. Nós colocaremos nossos
  258. diretórios do Smarty dentro de
  259. <filename class="directory">"/web/www.mydomain.com/smarty/guestbook/"</filename>.
  260. </para>
  261. <para>
  262. Você precisará pelo menos de um arquivo dentro de seu 'document root', e que seja acessado pelo
  263. navegador. Nós chamamos nosso
  264. script de <emphasis>"index.php"</emphasis>, e o colocamos em um subdiretório dentro
  265. do 'document root' chamado <filename class="directory">"/guestbook/"</filename>.
  266. </para>
  267. <note>
  268. <title>Nota Técnica</title>
  269. <para>
  270. É conveniente configurar o servidor web para que 'index.php' possa ser
  271. idendificado como o índice padrão do diretório, asssim se você acessar
  272. http://www.example.com/guestbook/, o script 'index.php' será executado
  273. sem adicionar 'index.php' na URL. No Apache você pode configurar isto adicioanando
  274. "index.php" ao final da sua configuração <emphasis>DirectoryIndex</emphasis>
  275. (separe cada item com um espaço.) como no exemplo de httpd.conf
  276. </para>
  277. <para>
  278. <emphasis>DirectoryIndex
  279. index.htm index.html index.php index.php3 default.html index.cgi
  280. </emphasis>
  281. </para>
  282. </note>
  283. <para>
  284. Vamos dar uma olhada na estrutura de arquivos até agora:
  285. </para>
  286. <example>
  287. <title>Exemplo de estrutura de arquivo</title>
  288. <screen>
  289. <![CDATA[
  290. /usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php
  291. /usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php
  292. /usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php
  293. /usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl
  294. /usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php
  295. /usr/local/lib/php/Smarty-v.e.r/libs/plugins/*.php
  296. /web/www.example.com/smarty/guestbook/templates/
  297. /web/www.example.com/smarty/guestbook/templates_c/
  298. /web/www.example.com/smarty/guestbook/configs/
  299. /web/www.example.com/smarty/guestbook/cache/
  300. /web/www.example.com/docs/guestbook/index.php
  301. ]]>
  302. </screen>
  303. </example>
  304. <para>
  305. O Smarty irá precisar de <emphasis role="bold">acesso de escrita</emphasis>
  306. (usuários de windows por favor ignorem) em
  307. <link linkend="variable.compile.dir">
  308. <emphasis>$compile_dir</emphasis></link> e
  309. <link linkend="variable.cache.dir">
  310. <emphasis>$cache_dir</emphasis></link>,
  311. então tenha certesa que o usuário do servidor web possa escrever.
  312. Este é geralmente o usuário "nobody" e o grupo "nobody" (ninguém). Para
  313. SO com X usuários, o usuário padrão é "www" e o grupo "www". Se você está usando Apache, você
  314. pode olhar em seu arquivo httpd.conf (normalmente em "/usr/local/apache/conf/") para ver
  315. qual o usuário e grupo estão sendo usados.
  316. </para>
  317. <example>
  318. <title>Configurando permissões de arquivos</title>
  319. <screen>
  320. <![CDATA[
  321. chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/
  322. chmod 770 /web/www.example.com/smarty/guestbook/templates_c/
  323. chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/
  324. chmod 770 /web/www.example.com/smarty/guestbook/cache/
  325. ]]>
  326. </screen>
  327. </example>
  328. <note>
  329. <title>Nota Técnica</title>
  330. <para>
  331. chmod 770 será a segurança correta suficientemente restrita, só permite ao usuário "nobody" e
  332. o grupo "nobody" acesso de leitura/escrita aos diretórios. Se você gostaria de abrir o acesso de leitura
  333. para qualquer um (na maioria das vezes para sua própria conveniência de querer ver estes
  334. arquivos), você pode usar o 775 ao invés do 770.
  335. </para>
  336. </note>
  337. <para>
  338. Nós precisamos criar o arquivo "index.tpl" que o Smarty vai ler. Ele estará localizado em seu
  339. <link linkend="variable.template.dir">$template_dir</link>.
  340. </para>
  341. <example>
  342. <title>Editando /web/www.example.com/smarty/guestbook/templates/index.tpl</title>
  343. <screen>
  344. {* Smarty *}
  345. Ola! {$name}, bem vindo ao Smarty!
  346. </screen>
  347. </example>
  348. <note>
  349. <title>Nota Técnica</title>
  350. <para>
  351. {* Smarty *} é um <link linkend="language.syntax.comments">comentário</link>
  352. de template. Ele não é exigido, mas é uma prática boa
  353. iniciar todos os seus arquivos de template com este com este comentário. Isto faz com
  354. que o arquivo seja reconhecido sem levar em consideração a sua extensão. Por exemplo,
  355. editores de texto poderiam reconhecer o arquivo e habilitar coloração de sintaxe especial.
  356. </para>
  357. </note>
  358. <para>
  359. Agora vamos editar 'index.php'. Nós vamos criar uma instancia do Smarty,
  360. <link linkend="api.assign">assign</link>(definir) uma
  361. variável do template e <link linkend="api.display">display</link>
  362. (mostrar) o arquivo 'index.tpl'.
  363. </para>
  364. <example>
  365. <title>Editando /web/www.example.com/docs/guestbook/index.php</title>
  366. <screen>
  367. <![CDATA[
  368. <?php
  369. // load Smarty library
  370. require_once(SMARTY_DIR . 'Smarty.class.php');
  371. $smarty = new Smarty();
  372. $smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
  373. $smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
  374. $smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
  375. $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
  376. $smarty->assign('name','Ned');
  377. $smarty->display('index.tpl');
  378. ?>
  379. ]]>
  380. </screen>
  381. </example>
  382. <note>
  383. <title>Nota Técnica</title>
  384. <para>
  385. No nosso exemplo, nós estamos definindo caminhos absolutor para todos os diretórios
  386. do Smarty. Se <filename class="directory">/web/www.example.com/smarty/guestbook/</filename>
  387. estiver dentro do seu include_path do PHP, então estas definições não são necessárias.
  388. Entretando, é mais eficinte e (com experiência) causa
  389. menos erros definir como caminhos absolutos. Isto faz ter certeza que o Smarty
  390. esta lendo os arquivos dos diretórios que você quer.
  391. </para>
  392. </note>
  393. <para>
  394. Agora carregue o arquivo <filename>index.php</filename> em seu navegador.
  395. Você veria "Olá, Thomas! bem vindo ao Smarty"
  396. </para>
  397. <para>
  398. Você completou a configuração básica para o Smarty!
  399. </para>
  400. </sect1>
  401. <sect1 id="installing.smarty.extended">
  402. <title>Estendendo a configuração</title>
  403. <para>
  404. Esta é uma continuação da <link
  405. linkend="installing.smarty.basic">instalação básica</link>,
  406. por favor leia a instalação básica primeiro!
  407. </para>
  408. <para>
  409. Uma forma um pouco mais flexível de configurar o Smarty é estender a classe e inicializar seu ambiente de
  410. Smarty. Então, ao invés de configurar caminhos de diretórios repetidamente, preencher as mesmas variáveis,
  411. etc., nós podemos fazer isso para facilitar. Vamos criar um novo diretório "/php/includes/guestbook/" e criar um
  412. novo arquivo chamado <filename>"setup.php"</filename>. Em nosso ambiente de exemplo, "/php/includes" está em nosso
  413. include_path. Certifique-se de que você
  414. também definiu isto, ou use caminhos de arquivos absolutos.
  415. </para>
  416. <example>
  417. <title>Editando /php/includes/guestbook/setup.php</title>
  418. <screen>
  419. <![CDATA[
  420. <?php
  421. // Carrega a biblioteca Smarty
  422. require('Smarty.class.php');
  423. // O arquivo setup.php é um bom lugar para carregar
  424. // arquivos necessarios para a aplicação e você
  425. // pode faze-lo aqui mesmo. Um exemplo:
  426. // require('guestbook/guestbook.lib.php');
  427. class Smarty_GuestBook extends Smarty {
  428. function Smarty_GuestBook()
  429. {
  430. // Construtor da classe.
  431. // Este é chamado a cada nova instância.
  432. $this->Smarty();
  433. $this->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
  434. $this->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
  435. $this->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
  436. $this->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
  437. $this->caching = true;
  438. $this->assign('app_name', 'Guest Book');
  439. }
  440. }
  441. ?>
  442. ]]>
  443. </screen>
  444. </example>
  445. <para>
  446. Agora vamos alterar o arquivo index.php para usar o setup.php:
  447. </para>
  448. <example>
  449. <title>Editando /web/www.example.com/docs/guestbook/index.php</title>
  450. <screen>
  451. require('guestbook/setup.php');
  452. $smarty = new Smarty_GuestBook;
  453. $smarty->assign('nome','Thomas');
  454. $smarty->display('index.tpl');
  455. </screen>
  456. </example>
  457. <para>
  458. Agora você pode ver que é extremamente simples criar uma instância do Smarty, apenas use
  459. Smarty_GuestBook que automaticamente inicializa tudo para a nossa aplicação.
  460. </para>
  461. </sect1>
  462. </chapter>
  463. </part>