committing portuguese docs updates from Thomas Gonzalez Miranda

This commit is contained in:
mohrt
2004-09-21 15:05:45 +00:00
parent 1a4250c21c
commit b2da073954
19 changed files with 558 additions and 541 deletions

View File

@@ -6,8 +6,8 @@
<para>
A homepage do Smarty est<73> localizada em <ulink
url="&url.smarty;">&url.smarty;</ulink>.
Voc<6F> pode entrar na lista de email enviando um e-mail para
&ml.general.sub;. Um arquivo da lista de e-mail pode ser
Voc<6F> pode entrar na lista de discuss<EFBFBD>o enviando um e-mail para
&ml.general.sub;. O arquivo da lista de discuss<EFBFBD>o pode ser
visto em <ulink url="&url.ml.archive;">&url.ml.archive;</ulink>.
</para>
</chapter>

View File

@@ -7,47 +7,50 @@
<sect1 id="tips.blank.var.handling">
<title>Manipula<EFBFBD><EFBFBD>o de Vari<72>vel Vazia</title>
<para>
Quando voc<6F> quer algumas vezes imprimir um valor que voc<6F> definir para uma vari<72>vel vazia
ao inv<6E>s de imprimir nada, tal como imprimindo "&amp;nbsp;" a fim de que plano de fundo de tabelas
funcionem corretamente. Muitos usariam uma instru<72><75>o {if} para manipular isto, mas h<> um
macete com o Smarty, usando o modificador de vari<72>vel
<emphasis>default</emphasis>.
H<EFBFBD> momentos que voc<6F> quer mostrar um valor padr<64>o para uma vari<72>vel vazia ao inv<6E>s de n<>o mostrar nada,
tal como mostrar "&amp;nbsp;" para que os planos de fundo de tabelas funcionem corretamente. Muitos
usariam uma instru<72><75>o {if} para fazer isso, mas h<> um macete que pode ser feito usando-se o
modificador de vari<72>vel <emphasis>padr<EFBFBD>o</emphasis> do Smarty.
</para>
<example>
<title>Imprimindo &amp;nbsp; quando uma vari<72>vel est<73> vazia</title>
<programlisting>
<![CDATA[
{* A forma mais longa *}
{if $title eq ""}
{if $titulo eq ""}
&amp;nbsp;
{else}
{$title}
{$titulo}
{/if}
{* A forma mais simples *}
{$title|default:"&amp;nbsp;"}</programlisting>
{$titulo|default:"&amp;nbsp;"}
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.default.var.handling">
<title>Manipula<EFBFBD><EFBFBD>o do valor padr<64>o de Vari<72>vel</title>
<title>Manipula<EFBFBD><EFBFBD>o do valor padr<64>o de uma Vari<EFBFBD>vel</title>
<para>
Se uma vari<72>vel <20> usada freq<65>entemente em seus templates, aplicando o modificador
default toda vez que ela <20> mencionado pode evitar um bit desagrad<61>vel. Voc<6F> pode remediar isto
pela atribui<EFBFBD><EFBFBD>o de um valor padr<64>o para a vari<72>vel com a fun<75><6E>o
<link linkend="language.function.assign">assign</link>.
Se uma vari<72>vel <20> usada freq<65>entemente e seus templates, aplicar o modificador de vari<72>vel
<emphasis>padr<EFBFBD>o</emphasis> toda vez pode se tornar algo muito desagrad<61>vel. Voc<6F> pode evitar
isto atribuindo um valor padr<64>o para a vari<72>vel usando a fun<75><6E>o <link linkend="language.function.assign">assign</link>.
</para>
<example>
<title>Atribuindo o valor padr<64>o para uma vari<72>vel de template</title>
<programlisting>
{* fa<66>a isto em algum lugar no topo de seu template *}
<![CDATA[
{* coloque isto em algum lugar no topo de seu template *}
{assign var="titulo" value=$titulo|default:"sem t<>tulo"}
{* Se o $titulo estava vazio, ele agora cont<6E>m o valor "sem titulo" quando voc<6F> exib<69>-lo *}
{$title}</programlisting>
{$titulo}
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.passing.vars">
@@ -62,91 +65,108 @@
<example>
<title>Passando a vari<72>vel titulo para o template de cabe<62>alho</title>
<programlisting>
mainpage.tpl
<![CDATA[
paginaprincipal.tpl
------------
{include file="header.tpl" titulo="P<>gina Principal"}
{* O corpo do template vem aqui *}
{include file="footer.tpl"}
{include file="cabecalho.tpl" titulo="P<>gina Principal"}
{* O conte<EFBFBD>do do template vem aqui *}
{include file="rodape.tpl"}
archives.tpl
arquivos.tpl
------------
{config_load file="archive_page.conf"}
{include file="header.tpl" titulo=#archivePageTitle#}
{* O corpo do template vem aqui *}
{include file="footer.tpl"}
{config_load file="pagina_arquivos.conf"}
{include file="cabecalho.tpl" titulo=#tituloPaginaArquivos#}
{* O conte<EFBFBD>do do template vem aqui *}
{include file="rodape.tpl"}
header.tpl
cabecalho.tpl
----------
&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;{$titulo|default:"BC News"}&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
<HTML>
<HEAD>
<TITLE>{$title|default:"BC News"}</TITLE>
</HEAD>
<BODY>
footer.tpl
----------
&lt;/BODY&gt;
&lt;/HTML&gt;</programlisting>
</BODY>
</HTML>
]]>
</programlisting>
</example>
<para>
Quando a p<>gina principal <20> atra<EFBFBD>da, o t<>tulo da "P<>gina Principal" <20> passado para o template
header.tpl, e ser<65> subseq<65>encialmente usado com o t<>tulo. Quando a p<>gina de arquivamento <20> atra<EFBFBD>da,
o t<>tulo ser<65> "Archives". Note no exemplo de archive, n<>s estamos usando uma vari<72>vel do arquivo
archives_page.conf ao inv<6E>s de uma vari<72>vel codificada r<>gida.
Tamb<6D>m note que "BC news" <20> exibida se
a vari<72>vel $titulo n<>o est<73> definida,
usando o modificador de vari<72>vel <emphasis>default</emphasis>.
Quando a p<>gina for extra<EFBFBD>da, o t<>tulo da "P<>gina Principal" <20> passado ao template 'cabecalho.tpl',
e ser<65> imediatamente usado como t<>tulo da p<>gina. Quando a p<>gina de arquivos <20> extra<EFBFBD>da, o t<>tulo
muda para "Arquivos". No que no exemplo de arquivos, n<>s estamos usando uma vari<72>vel que vem do
arquivo 'pagina_arquivos.conf' ao inv<6E>s de uma vari<72>vel definida no c<>digo. Note tamb<6D>m que "BC News"
<20> mostrado somente se a vari<72>vel $titulo n<>o conter valor algum, isto <20> feito usando-se o modificador
de vari<72>veis <emphasis>padr<EFBFBD>o</emphasis>.
</para>
</sect1>
<sect1 id="tips.dates">
<title>Datas</title>
<para>
Como uma regra b<>sica, sempre passe datas para o smarty como timestamps. Isto permite ao
desenhista de template utilizar <link linkend="language.modifier.date.format">date_format</link>
para controle completo sobre a formata<74><61>o de data,
e tamb<EFBFBD>m facilita a compara<72><61>o de datas se
necess<73>rio.
Em geral, sempre envie datas ao Smarty no formato timestamp. Deste modo o desginer do template
pode usar o modificador <link linkend="language.modifier.date.format">date_format</link>
para ter um controle total sobre a formata<74><61>o da data, e tamb<6D>m facilita a compara<72><61>o de datas
se necess<EFBFBD>rio.
</para>
<para>
NOTA: No Smarty 1.4.0, voc<6F> pode passar datas para o Smarty como timestamps unix,
mysql, ou qualquer outra data interpret<EFBFBD>vel por strtotime().
Nota: No Smarty 1.4.0, voc<6F> pode enviar datas ao Smarty no formato unix timestamp,
mysql timestamp, ou qualer outra data que possa ser lida pela fun<75><6E>o strtotime().
</para>
<example>
<title>Usando date_format</title>
<programlisting>
<example>
<title>usando date_format</title>
<programlisting>
<![CDATA[
{$startDate|date_format}
SA<EFBFBD>DA:
Jan 4, 2001
{$startDate|date_format:"%Y/%m/%d"}
SA<EFBFBD>DA:
2001/01/04
{if $date1 &lt; $date2}
...
{/if}</programlisting>
</example>
]]>
</programlisting>
<para>
Quando usando {html_select_date} em um template, o programador normalmente vai querer converter
a sa<73>da de um formul<75>rio de volta para o formato de timestamp. Aqui est<73> uma fun<75><6E>o para ajudar
com isso.
Ir<EFBFBD> mostrar:
</para>
<screen>
<![CDATA[
Jan 4, 2001
]]>
</screen>
<programlisting>
<![CDATA[
{$startDate|date_format:"%Y/%m/%d"}
]]>
</programlisting>
<para>
Ir<49> mostrar:
</para>
<screen>
<![CDATA[
2001/01/04
]]>
</screen>
<programlisting>
<![CDATA[
{if $data1 < $data2}
...
{/if}
]]>
</programlisting>
</example>
<para>
Quando se est<73> usando {html_select_date} em um template, o programador normalmente vai querer
converter a sa<73>da de um formul<75>rio de volta para o formato timestamp. Abaixo est<73> uma fun<75><6E>o
que ir<69> ajud<75>-lo <20> fazer isto.
</para>
<example>
<title>Convertendo elementos em forma de data de volta para um timestamp</title>
<programlisting>
// isto assume que a forma de seus elementos s<>o nomeadas como
<title>Convertendo datas de volta ao formato timestamp</title>
<programlisting role="php">
<![CDATA[
<?php
// presume-se que os elementos de seu formul<75>rio s<>o chamados de
// startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
@@ -161,175 +181,159 @@ function makeTimeStamp($year="",$month="",$day="")
$day = strftime("%d");
return mktime(0,0,0,$month,$day,$year);
}</programlisting>
}
?>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.wap">
<title>WAP/WML</title>
<para>
Os templates WAP/WML requerem um cabe<62>alho de Content-Type de PHP para ser passado junto com
template. A forma mais f<>cil de fazer isto seria escrever uma fun<75><6E>o customizada que imprime
o cabe<62>alho. Se voc<6F> est<73> usando sistema de caching, esse n<>o funcionar<EFBFBD>, ent<EFBFBD>o n<>s faremos isso
usando a tag de insert (lembre que tags de insert n<>o s<>o "cached!") Certifique-se que n<EFBFBD>o h<EFBFBD> sa<73>da
para o navegador antes do template,
sen<65>o o cabe<62>alho ir<69> falhar.
Os templates WAP/WML exigem um cabe<62>alho com o tipo de conte<74>do (Content-Type) PHP para serem
passados junto com o template. O modo mais f<>cil de se fazer isso seria escrever uma fun<75><6E>o
personalizada que envia-se este cabe<62>alho. Se voc<6F> est<73> usando cache, isto n<>o ir<69> funcionar,
ent<6E>o n<>s faremos isso usando a tag insert (lembre-se que tags de insert n<>o s<>o guardadas no cache!).
Certifique-se de que nada <20> enviado ao navegador antes do template, caso contr<74>rio o cabe<62>alho n<>o ir<69>
funcionar.
</para>
<example>
<title>Usando insert para escrever um cabe<62>alho WML Content-Type</title>
<programlisting>
// esteja certo que o apache est<73> configurado para as extens<6E>es .wml !
// ponha esta fun<75><6E>o em algum lugar de sua aplica<63><61>o, ou em Smarty.addons.php
function insert_header() {
<programlisting role="php">
<![CDATA[
<?php
// certifique-se que o apache est<73> configurado para reconhecer extens<6E>es .wml!
// coloque esta fun<75><6E>o em algum lugar de seu aplicativo, ou no arquivo Smarty.addons.php
function insert_header($params)
{
// esta fun<75><6E>o espera o argumento $content
extract(func_get_arg(0));
if(empty($content))
if (empty($params['content'])) {
return;
header($content);
}
header($params['content']);
return;
}
// seu template Smarty _deve_ come<6D>ar com a insert tag, olha o exemplo:
?>
]]>
</programlisting>
<para>
seu template do Smarty deve come<6D>ar com a tag insert, veja o exemplo <20> seguir:
</para>
<programlisting>
<![CDATA[
{insert name=header content="Content-Type: text/vnd.wap.wml"}
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
&lt;!-- begin new wml deck --&gt;
&lt;wml&gt;
&lt;!-- begin first card --&gt;
&lt;card&gt;
&lt;do type="accept"&gt;
&lt;go href="#two"/&gt;
&lt;/do&gt;
&lt;p&gt;
<!-- begin new wml deck -->
<wml>
<!-- begin first card -->
<card>
<do type="accept">
<go href="#two"/>
</do>
<p>
Bem-vindo ao WAP com Smarty!
Pressione OK para continuar...
&lt;/p&gt;
&lt;/card&gt;
&lt;!-- begin second card --&gt;
&lt;card id="two"&gt;
&lt;p&gt;
</p>
</card>
<!-- begin second card -->
<card id="two">
<p>
Bem f<>cil isso, n<>o <20>?
&lt;/p&gt;
&lt;/card&gt;
&lt;/wml&gt;</programlisting>
</p>
</card>
</wml>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.componentized.templates">
<title>Templates componentizados</title>
<para>
Esta dica <20> um pouco de hack, mas ainda <20> uma id<69>ia limpa.
Use-a por seu pr<70>prio risco. ;-)
Tradicionalmente, programar templates para suas aplica<63><61>es <20> feito da seguinte maneira:
Primeiro, voc<6F> guardar suas vari<72>veis junto com a aplica<63><61>o PHP, (talvez obtendo-as de consultas
<20> banco de dados). Ap<41>s, voc<6F> instancia seu objeto Smarty, atribui valores <20>s vari<72>veis e
mostra o template. Digamos que n<>s temos um registrador de estoque em nosso template. N<>s
coletar<61>amos os dados do estoque em nossa aplica<63><61>o, e ent<6E>o atribu<62>riamos valores as vari<72>veis
referentes <20> ele no template e depois exibir<69>amos o template na tela. Agora n<>o seria legal
se voc<6F> pudesse adicionar este registrador de esto em qualquer aplica<63><61>o simplesmente incluindo
um template nela, e sem se preocupar com a busca dos dados futuramente?
</para>
<para>
Tradicionalmente, programar templates em suas aplica<63><61>es segue esta forma:
Primeiro, voc<6F> acumula suas vari<72>veis dentro de sua aplica<63><61>o PHP, (talvez com requisi<73><69>es
de banco de dados.) Ent<6E>o, voc<6F> instancia seu objeto Smarty, atribui valores <20>s vari<72>veis
e exibe o template. Por exemplo n<>s temos um registrador de estoque em nosso template.
N<>s coletar<61>amos os dados estocagem em nossa aplica<63><61>o, ent<6E>o damos valor a estas vari<72>veis
no template e o exibimos. Agora isso seria legal
se voc<6F> adicionasse este registrador de
armazenamento (stock ticker) para qualquer aplica<63><61>o simplesmente incluindo o template, e sem
se preocupar com a busca de dados mais a frente?
</para>
<para>
Voc<6F> pode embutir o PHP dentro de seus templates com as tags {php}{/php}.
Com isto, voc<6F> pode configurar templates independentes, tendo a sua pr<70>pria
estrutura de dados para dar valor <20>s suas pr<70>prias vari<72>veis. Com a l<>gica embutida
dessa forma, voc<6F> pode manter a l<>gica do template &amp; junto. Desta maneira n<>o <20>
importante de onde o fonte do
template est<73> vindo, ele est<73> sempre junto como um componente.
Voc<6F> pode fazer isto escrevendo um plugin personalizado que obteria o
conte<74>do e atribuiria ele <20> uma vari<72>vel definida no template.
</para>
<example>
<title>Template componentizado</title>
<programlisting>
{* Smarty *}
<programlisting role="php">
<![CDATA[
<?php
{php}
// coloque o arquivo "function.load_ticker.php" no diret<65>rio plugin
// configurar nossa fun<75><6E>o para buscar dados armazenados
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) {
// ponha a l<>gica aqui que procura $ticker_name
// e $ticker_price de algum recurso
}
// configura nossa fun<75><6E>o para pegar os dados do estoque
function fetch_ticker($symbol)
{
// coloque a l<>gica que obt<62>m os dados de
// algum recurso e guarde na vari<72>vel $ticker_info
return $ticker_info;
}
function smarty_function_load_ticker($params, &$smarty)
{
// chama a fun<75><6E>o
fetch_ticker("YHOO",$ticker_name,$ticker_price);
// passando valores <20>s vari<72>veis de template
$this->assign("ticker_name",$ticker_name);
$this->assign("ticker_price",$ticker_price);
{/php}
Nome do Estoque: {$ticker_name} Pre<72>o do Estoque: {$ticker_price}</programlisting>
</example>
<para>
No Smarty 1.5.0, h<> at<61> uma forma mais limpa. Voc<6F> pode incluir o php em seus templates com
a tag {include_php ...}.
Desta forma voc<6F> pode manter a l<>gica do PHP separada da l<>gica do
template. Veja a fun<75><6E>o <link linkend="language.function.include.php">include_php</link> para
mais informa<6D><61>o.
</para>
<example>
<title>Template componentizado com include_php</title>
<programlisting>
load_ticker.php
---------------
&lt;?php
// configura nossa fun<75><6E>o para buscar os dados armazenados
function fetch_ticker($symbol,&amp;$ticker_name,&amp;$ticker_price) {
// ponha aqui a l<>gica que procura $ticker_name
// e $ticker_price de algum recurso
}
// chama a fun<75><6E>o
fetch_ticker("YHOO",$ticker_name,$ticker_price);
// passar valores para as vari<72>veis de template
$this->assign("ticker_name",$ticker_name);
$this->assign("ticker_price",$ticker_price);
?&gt;
$ticker_info = fetch_ticker($params['symbol']);
// atribuite o valor <20> uma vari<72>vel no template
$smarty->assign($params['assign'], $ticker_info);
}
?>
]]>
</programlisting>
<programlisting>
<![CDATA[
index.tpl
---------
{* Smarty *}
{include_php file="load_ticker.php"}
{load_ticker symbol="YHOO" assign="ticker"}
Nome do Estoque: {$ticker_name} Pre<72>o do Estoque: {$ticker_price}</programlisting>
Nome no estoque: {$ticker.name} Pre<72>o no estoque: {$ticker.price}
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.obfuscating.email">
<title>Ofuscando endere<72>os de E-mail</title>
<para>
Voc<6F> deseja saber como seu endere<72>o de E-mail consegue entrar em tantas listas de email de spam?
A <20>nica forma de spammers coletar endere<72>os de E-mail <20> de p<>ginas da web. Para ajudar a combater
este problema, voc<6F> pode fazer o seu endere<72>o de E-mail aparecer em javascript misturado no
c<>digo HTML, mesmo assim ele aparecer<EFBFBD> e funcionar<EFBFBD> corretamente no navegador. Isto <20> feito com
o plugin mailto.
Voc<6F> j<> se espantou como seu endere<72>o de E-mail entra em tantas listas de spam?
A <20>nica forma dos spammers coletarem seu(s) endere<72>o(s) de E-mail(s) <20> de p<>ginas web.
Para ajudar <20> combater este problema, voc<6F> pode fazer seu endere<72>o de E-mail aparecer em javascript
misturado em c<EFBFBD>digo HTML, e ainda assim ele ir<69> aparecer e funcionar corretamente no navegador.
Isto <20> feito com o plugin chamado 'mailto'.
</para>
<example>
<title>Exemplo de ofuscamento de um Endere<72>o de E-mail</title>
<programlisting>
<![CDATA[
index.tpl
---------
envia inquisi<EFBFBD><EFBFBD>o para
envia informa<EFBFBD><EFBFBD>es para
{mailto address=$EmailAddress encode="javascript" subject="Ol<4F>"}
]]>
</programlisting>
</example>
<note>
<title>Nota t<>cnica</title>
<para>
Este m<>todo n<>o <20> 100% a prova de falha. Um spammer poderia criar um programa
para coletar o e-mail e para decodificar estes valores, mas n<EFBFBD>o <EFBFBD> muito comum.
para coletar o e-mail e decodificar estes valores, mas <20> muito pouco prov<6F>vel.
</para>
</note>
</sect1>

View File

@@ -4,11 +4,10 @@
<title>Localiza<EFBFBD><EFBFBD>o de Erros</title>
<para></para>
<sect1 id="smarty.php.errors">
<title>erros de Smarty/PHP </title>
<title>Erros do Smarty/PHP</title>
<para>
O Smarty pode obter muitos erros tais como, atributos de tags perdidos ou nomes de vari<72>veis
mal formadas. Se isto acontece, voc<6F> ver<65>
um erro como segue:
mal formadas. Se isto acontece, voc<6F> ver<65> um erro similar ao seguir:
</para>
<example>
@@ -28,9 +27,9 @@ Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
</para>
<para>
H<> certos erros que o smarty n<>o pode entender, tais como um um fechamento de tags errado.
Estes tipos de erros normalmente
termina na interpreta<74><61>o de erros do tempo de compila<6C><61>o do PHP.
H<> certos erros que o Smarty n<>o consegue detectar, tais como uma tag de fechamento errada.
Estes tipos de erro geralmente acabam gerando erros em tempo de processamento do interpretador
de erros do PHP.
</para>
<example>
@@ -44,10 +43,10 @@ Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
script PHP compilado, n<>o o template em si. Normalmente voc<6F> pode no template localizar o
erro de sintaxe. Aqui algumas coisas para voc<6F> procurar:
falta de fechamento de tags para {if}{/if} ou
{section}{/section}, ou sintaxe da l<>gica dentro de uma tag {if}.
Se voc<6F> n<>o encontra o erro, voc<EFBFBD> pode ter
que abrir o arquivo PHP compilado e ir at<61> o numero da linha exibido, no local onde o erro correspondente
est<73> no template.
{section}{/section}, ou erro de l<>gica dentro de uma tag {if}.
Se voc<6F> n<>o conseguir encontrar o erro, talvez seja necess<73>rio abrir
o arquivo PHP compilado e ir at<61> o n<EFBFBD>mero da linha exibido, para saber
onde se encontra o erro correspondente no template.
</para>
</sect1>
</chapter>

View File

@@ -21,6 +21,9 @@
<author>
<firstname>Taniel</firstname><surname>Franklin &lt;taniel@ig.com.br&gt;</surname>
</author>
<author>
<firstname>Thomas</firstname><surname>Thomas Gonzalez Miranda &lt;thomasgm@php.net&gt;</surname>
</author>
</authorgroup>
<pubdate>&build-date;</pubdate>
<copyright>

View File

@@ -3,36 +3,35 @@
<chapter id="chapter.debugging.console">
<title>Debugging Console</title>
<para>
H<> um console para debug incluso no Smarty. O console informa a voc<6F> de
todos os templates inclu<6C>dos, vari<72>veis definidas e vari<72>veis de arquivos de configura<EFBFBD><EFBFBD>o
da chamada atual do template. Um template chamado "debug.tpl"
<20> incluso com a distribui<75><69>o do Smarty o qual controla a formata<EFBFBD><EFBFBD>o
do console. Defina $debugging para true no Smarty, e se necess<73>rio defina $debug_tpl
para o caminho de recurso de debug.tpl (isto <20> SMARTY_DIR por
padr<EFBFBD>o.) Quando voc<6F> carrega uma p<>gina, um console em javascript ir<69> abrir uma
janela popup e dar a voc<6F> o nome de todos os templates inclu<6C>dos e as vari<EFBFBD>veis definidas
para a p<>gina atual. Para ver as vari<72>veis dispon<6F>veis para um template
em particular, veja a fun<75><6E>o <link linkend="language.function.debug">{debug}</link>.
Para desabilitar o console de debug, defina $debugging para
false. Voc<6F> pode ativar temporariamente o console de debug colocando
SMARTY_DEBUG na URL se voc<6F> ativou esta op<6F><70>o com <link
linkend="variable.debugging.ctrl">$debugging_ctrl</link>.
H<> um console para debug incluso no Smarty. O console informa <EFBFBD> voc<6F> todos
os templates inclu<6C>dos, vari<72>veis definidas e vari<72>veis de arquivos de
configura<72><61>o do template atual. Um template chamado "debug.tpl" est<73>
incluso com a distribui<75><69>o do Smarty o qual controla a formta<74><61>o do console.
Defina a vari<72>vel $debugging para true no Smarty, e se necess<73>rio defina
$debug_tpl com o caminho do diret<65>rio onde est<73> o arquivo debug.tpl (o diret<65>rio padr<64>o
<EFBFBD> o da constante SMARTY_DIR). Quando voc<6F> carrega uma p<>gina, um javascript abre uma
janela pop-up e fornece <20> voc<6F> o nome de todos os templates inclu<6C>dos e vari<72>veis definidas
ara a p<>gina atual. Para ver as vari<72>veis dispon<6F>veis para um template espec<65>fico,
veja a fun<75><6E>o <link linkend="language.function.debug">{debug}</link>. Para desabilitar
o console de debug, defina a vari<72>vel $debugging para false. Voc<6F> tamb<6D>m pode ativar
temporariamente o console de debug colocando na URL, caso voc<6F> tenha ativado esta op<6F><70>o
na vari<72>vel <link linkend="variable.debugging.ctrl">$debugging_ctrl</link>.
</para>
<note>
<title>Nota T<>cnica</title>
<para>
O console de debug n<>o funciona quando voc<6F> usa a API fetch(),
apenas quando estiver usando display(). <20> um conjunto de comandos javascript
adicionados ao final do template gerado. Se voc<6F> n<>o gosta de javascript,
voc<6F> pode editar o template debug.tpl para formatar a sa<73>da como voc<6F> quiser.
Dados de debug n<>o s<>o guardados em cache e os dados de debug.tpl
n<>o s<>o inclu<EFBFBD>dos no console de debug.
somente quando voc<6F> estiver usando display(). Isto <20> um conjunto de comandos
em javascript adicionados ao final do template gerado. Se voc<6F> n<>o gosta de javascript,
voc<6F> pode editar o template debug.tpl para exibir sa<73>da no formato que voc<6F> quiser.
Dados do debug n<>o s<>o armazenados em cache e os dados do debug.tpl n<>o s<>o
inclusos no console de debug.
</para>
</note>
<note>
<para>
Os tempos de carregamento de cada template e arquivo de cofigura<72><61>o s<>o em segundos,
ou ent<6E>o fra<72><61>es.
O tempo de carregamento de cada template e arquivo de configura<EFBFBD><EFBFBD>o s<>o exibidos em
segundos, ou ent<6E>o fra<72><61>es de segundo.
</para>
</note>
</chapter>

View File

@@ -3,69 +3,68 @@
<chapter id="config.files">
<title>Arquivos de Configura<72><61>o</title>
<para>
Arquivos de configura<72><61>o s<>o <20>teis para designers gerenciarem v<EFBFBD>riaveis
globais para os templates a partir de um arquivo. Um exemplo s<>o as cores do template. Normalmente se
se voc<6F> quer mudar o tema de cores para uma aplica<63><61>o, voc<6F> deve ir
em cada um dos arquivos de template e mudar as cores. Com
um arquivo de configura<72><61>o, as cores podem ser mantidas em um lugar, e apenas
um arquivo precisa ser atualizado.
Arquivos de configura<72><61>o s<>o <20>teis para designers que gerenciam vari<EFBFBD>veis globais
para os templates <EFBFBD> partir de um arquivo. Um exemplo s<>o as cores do template.
Normalmente se voc<6F> quisesse mudar o tema de cores de uma aplica<63><61>o, voc<6F> teria
que abrir cada arquivo de template e alterar as cores. Com arquivos de configura<72><61>es,
as cores podem ser armazenadas em um lugar, e apenas um arquivo precisaria ser alterado.
</para>
<example>
<title>Examplo de sintaxe de um arquivo de configura<72><61>o</title>
<title>Exemplo de sintaxe de um arquivo de configura<72><61>o</title>
<programlisting>
# global variables
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
<![CDATA[
# vari<72>veis globais
tituloPagina = "Menu Principal"
corfundoPagina = #000000
corfundoTabela = #000000
corlinhaTabela = #00ff00
[Customer]
pageTitle = "Customer Info"
[Consumidor]
tituloPagina = "Informa<6D><61>es do Consumidor"
[Login]
pageTitle = "Login"
focus = "username"
Intro = """este <20> um valor
que se divide m mais de uma linha. deve
estar dentro de tr<74>s aspas."""
tituloPagina = "Login"
focus = "nomeusuario"
Intro = """Este <20> um valor que ultrapassa uma
linha. Voc<6F> deve coloc<6F>-lo
dentre tr<74>s aspas."""
# hidden section
[.Database]
host=my.domain.com
db=ADDRESSBOOK
user=php-user
pass=foobar</programlisting>
# se<73><65>o invis<69>vel
[.BancoDeDados]
host=meu.dominio.com
bd=LIVRODEVISITAS
usuario=usuario-php
senha=foobar
]]>
</programlisting>
</example>
<para>
Valores de vari<72>veis podem estar entre aspas, mas n<>o <20> necess<73>rio.
Voc<6F> pode usar aspas simples ou duplas. Se voc<6F> tiver um valor que
ocupe mais de uma linha, coloque todo o valor entre tr<74>s aspas
("""). Voc<6F> pode colocar coment<6E>rios em um arquivo de configura<72><61>o com qualquer sintaxe
que n<>o seja v<>lida em um arquivo de configura<72><61>o. N<>s recomendamos usar um <literal>#</literal>
(cancela) no <20>nicio de cada linha.
Valores de vari<72>veis de arquivos de configura<72><61>o pode estar entre aspas,
mas n<>o <20> necess<73>rio. Voc<6F> pode usar tanto aspas simples como duplas.
Se voc<6F> tiver um valor que ocupe mais de uma linha, coloque-o dentre tr<74>s aspas
("""). Voc<6F> pode colocar coment<6E>rios em arquivos de configura<72><61>o com qualquer
sintaxe que n<>o <EFBFBD> v<>lida para um arquivo de configura<72><61>o. N<>s recomendamos usar um
<literal>#</literal> (cancela) no in<EFBFBD>cio de cada linha que cont<6E>m o coment<6E>rio.
</para>
<para>
Este arquivo de onfigura<72><61>o tem duas se<73><65>es. Nomes de se<73><65>es devem estar entre conchetes
[]. Nomes de se<73><65>o podem ser string arbritraria que n<>o contenham os s<>mbolos
<literal>[</literal> ou <literal>]</literal>. As quatro vari<72>veis no top s<>o
vari<72>veis globais, ou vari<72>veis sem se<73><65>o.
Estas vari<72>veis s<EFBFBD>o sempre carregadas do arquivo de configura<72><61>o. Se uma se<73><65>o em
particular for carregada, ent<6E>o as vari<72>veis globais e as vari<72>veis desta se<73><65>o s<>o carregadas.
Se uma vari<72>vel existir como global e dentro de uma se<73><65>o,
a vari<72>vel da se<73><65>o ser<65> utilizada. Se voc<6F> tiver duas vari<72>veis na mesma se<73><65>o com o mesmo nome,
Este arquivo de configura<EFBFBD><EFBFBD>o tem duas se<73><65>es. Nomes de se<73><65>es devem estar entre conchetes [].
Nomes de se<73><65>o podem ser string arbritraria que n<>o contenham os s<>mbolos
<literal>[</literal> ou <literal>]</literal>. As quatro vari<72>veis no topo s<>o vari<72>veis globais,
ou vari<72>veis que n<>o pertencem <20> uma se<73><65>o. Estas vari<72>veis sempre s<>o carregadas do arquivo de
configura<72><61>o. Se uma se<73><EFBFBD>o em particular <20> carregada, ent<6E>o as vari<72>veis globais e as vari<72>veis
desta se<73><65>o tamb<6D>m s<>o carregadas. Se uma vari<72>vel de se<73><65>o e global j<> existirem,
a vari<72>vel de se<73><65>o ser<65> utilizada. Se voc<6F> tiver duas vari<72>veis na mesma se<73><65>o com o mesmo nome,
a <20>ltima ser<65> utilizada.
</para>
<para>
Arquivos de configura<72><61>o s<>o carregados no template com a fun<75><6E>o embutida
<command>config_load</command>.
Arquivos de configura<72><61>o s<>o carregados no template usando a fun<75><6E>o embutida <command>config_load</command>.
</para>
<para>
Voc<6F> pode esconder vari<72>veis ou se<73><65>es inteiras colocando um ponto
antes do nome da vari<72>vel. Isto <20> <20>til se a sua aplica<63><61>o
se arquivos de configura<72><61>o e l<EFBFBD> dados sens<6E>veis a partir deles
que a ferramenta de template n<>o precisa. Se voc<6F> tem terceiros fazendo a edi<64><69>o de templates,
voc<6F> ter<65> certesa que eles n<>o leiam dados sens<6E>veis
do arquivo de configura<72><61>o carregando ele no template.
Voc<6F> pode esconder as vari<EFBFBD>veis ou uma se<EFBFBD><EFBFBD>o inteira colocando um ponto
antes do nome da se<EFBFBD><EFBFBD>o ou vari<EFBFBD>vei. Isso <20> <20>til em casos no qual sua aplica<63><61>o l<>
arquivos de configura<72><61>o e obt<EFBFBD>m dados sens<6E>veis que n<>o s<>o necess<73>rios para o sistema
de templates. Se a edi<64><69>o de seus templates <20> terceirizada, voc<6F> ter<65> certeza que eles n<>o
ir<69>o ler os dados sens<6E>veis do arquivo de configura<72><61>o que <20> carregado no template.
</para>
</chapter>
<!-- Keep this comment at the end of the file

View File

@@ -4,16 +4,15 @@
<chapter id="language.basic.syntax">
<title>Sintaxe B<>sica</title>
<para>
Todas as tags de template do Smarty est<EFBFBD>o fechadas com delimitadores.
Por padr<64>o, estes delimitadores s<>o <literal>{</literal> e
<literal>}</literal>, mas eles podem ser mudados.
Todas as tags de template do Smarty cont<EFBFBD>m delimitadores. Por padr<64>o,
estes delimitadores s<>o <literal>{</literal> e <literal>}</literal>,
mas eles podem ser alterados.
</para>
<para>
Para estes exemplos, n<>s iremos assumir que voc<6F> est<73> usando os
delimitadores padr<EFBFBD>o. No Smarty, todo o conte<74>do fora dos delimitadores <20>
mostrado como conte<EFBFBD>do estatico, ou sem modifica<63><61>es. Quando o Smarty encontra
tags de template, ele tenta interpreta-las, e ent<6E>o mostra a sa<73>da
apropriada em seu lugar.
Para os exemplos <20> seguir, n<>s assumiremos que voc<6F> est<73> usando os delimitadores
padr<64>o. Para o Smarty, todo o conte<74>do fora dos delimitadores <20> mostrado como
conte<74>do est<EFBFBD>tico, ou inalter<EFBFBD>vel. Quando o Smarty encontra tags de template,
ele tenta interpret<EFBFBD>-las, e ent<6E>o mostra a sa<73>da apropriada em seu lugar.
</para>
&designers.language-basic-syntax.language-syntax-comments;

View File

@@ -3,24 +3,27 @@
<sect1 id="language.math">
<title>Matem<EFBFBD>tica</title>
<para>
Matem<65>tica pode ser aplicada diretamente em valores de vari<72>veis.
Matem<65>tica pode ser aplicada diretamente aos valores de vari<72>veis.
</para>
<example>
<title>Exemplos de matem<65>tica</title>
<programlisting>
<![CDATA[
{$foo+1}
{$foo*$bar}
{* alguns exemplos mais complicados *}
{$foo-&gt;bar-$bar[1]*$baz-&gt;foo-&gt;bar()-3*7}
{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
{if ($foo+$bar.test%$baz*134232+10+$b+10)}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}</programlisting>
{assign var="foo" value="`$foo+$bar`"}
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -3,15 +3,15 @@
<sect1 id="language.syntax.attributes">
<title>Atributos</title>
<para>
A maioria das fun<75><6E>es levam atributos que especificam ou modificam o seu
funcionamento. Atributos para fun<75><6E>es Smarty s<>o muito parecidos como
atributos HTML. Valores est<73>ticos s<EFBFBD>o precisam estar entre aspas,
mas <20> recomendados para strings literais. Vari<72>veis tamb<6D>m podem ser
usadas, e n<>o precisam estar entre aspas.
A maioria das fun<75><6E>es cont<EFBFBD>m atributos que especificam ou modificam
o seu comportamento. Atributos para fun<75><6E>es do Smarty s<>o muito parecidos
com atributos da HTML. Valores est<73>ticos n<EFBFBD>o precisam ficar entre aspas,
mas recomenda-se usar aspas para strings literais. Vari<72>veis tamb<6D>m podem
ser usadas, e n<>o precisam estar entre aspas.
</para>
<para>
Alguns atributos requerem valores booleanos (true ou false). Estes podem
ser especificados sem aspas <literal>true</literal>,
Alguns atributos exigem valores booleanos (verdadeiro ou falso). Estes valores
podem ser especificados sem aspas <literal>true</literal>,
<literal>on</literal>, e <literal>yes</literal>, ou
<literal>false</literal>, <literal>off</literal>, e
<literal>no</literal>.
@@ -19,17 +19,20 @@
<example>
<title>Sintaxe de atributos de fun<75><6E>es</title>
<programlisting>
{include file="header.tpl"}
<![CDATA[
{include file="cabecalho.tpl"}
{include file=$includeFile}
{include file=$arquivoInclude}
{include file=#includeFile#}
{include file=#arquivoInclude#}
{html_select_date display_days=yes}
&lt;SELECT name=company&gt;
<select name="empresa">
{html_options values=$vals selected=$selected output=$output}
&lt;/SELECT&gt;</programlisting>
</select>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -3,27 +3,30 @@
<sect1 id="language.syntax.comments">
<title>Coment<EFBFBD>rios</title>
<para>
Coment<EFBFBD>rios de template s<EFBFBD>o cercados por asteriscos, e s<>o cercados por
delimitadores, assim: {* este <20> um coment<6E>rio *}.
Coment<6E>rios Smarty n<>o s<>o mostrado na sa<73>da final do template.
Eles s<>o usados para fazer notas internas nos templates.
Os coment<EFBFBD>rios do template ficam entre asteriscos dentro de delimitadores,
exemplo: {* este <20> um coment<6E>rio *}. Coment<6E>rios do Smarty n<>o s<>o
exibidos no resultado final do template. Eles s<>o usados para fazer
anota<EFBFBD><EFBFBD>es internas nos templates.
</para>
<example>
<title>Coment<EFBFBD>rios</title>
<programlisting>
<![CDATA[
{* Smarty *}
{* inclui o arquivo header aqui *}
{include file="header.tpl"}
{* inclua o arquivo de cabe<62>alho aqui *}
{include file="cabecalho.tpl"}
{include file=$includeFile}
{include file=$arquivoInclude}
{include file=#includeFile#}
{include file=#arquivoInclude#}
{* Mostra listas dropdown *}
&lt;SELECT name=company&gt;
{* mostra lista dropdown *}
<select name="empresa">
{html_options values=$vals selected=$selected output=$output}
&lt;/SELECT&gt;</programlisting>
</select>
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -5,33 +5,35 @@
<para>
Cada tag Smarty mostra uma
<link linkend="language.variables">vari<EFBFBD>vel</link> ou utiliza algum tipo de
fun<75><6E>o. Fun<75><6E>es s<>o processadas e mostradas colocando-se a fun<75><6E>o e seus
atributos entre delimitadores, assim: {funcname
attr1="val" attr2="val"}.
fun<75><6E>o. Fun<75><6E>es s<>o processadas e exibidas colocando-se a fun<75><6E>o e seus
atributos entre delimitadores, exemplo: {funcname attr1="val" attr2="val"}.
</para>
<example>
<title>Sintaxe de fun<75><6E>es</title>
<programlisting>
{config_load file="colors.conf"}
<![CDATA[
{config_load file="cores.conf"}
{include file="header.tpl"}
{include file="cabecalho.tpl"}
{if $highlight_name}
Welcome, &lt;font color="{#fontColor#}"&gt;{$name}!&lt;/font&gt;
{if $enfase_nome}
Seja bem-vindo, <font color="{#fontColor#}">{$nome}!</font>
{else}
Welcome, {$name}!
Seja bem-vindo, {$nome}!
{/if}
{include file="footer.tpl"}</programlisting>
{include file="rodape.tpl"}
]]>
</programlisting>
</example>
<para>
Ambas as fun<75><6E>es internas e as fun<75><6E>es customizadas tem a mesma sintaxe nos
Ambas as fun<75><6E>es internas e as fun<75><6E>es personalizadas tem a mesma sintaxe nos
templates. Fun<75><6E>es internas s<>o o funcionamento do Smarty,
assim como <command>if</command>, <command>section</command> e
<command>strip</command>. Elas n<>o podem ser modificadas. Fun<75><6E>es customizadas
s<>o fun<75><6E>es adicionais implementadas por plugins. Elas podem ser modificadas
tais como <command>if</command>, <command>section</command> e
<command>strip</command>. Elas n<>o podem ser modificadas. Fun<75><6E>es personalizadas
s<>o fun<75><6E>es adicionais implementadas por modo de plugins. Elas podem ser modificadas
como voc<6F> quiser, ou voc<6F> pode adionar novas. <command>html_options</command> e
<command>html_select_date</command> s<>o exemplos de fun<75><6E>es customizadas.
<command>html_select_date</command> s<>o exemplos de fun<75><6E>es personalizadas.
</para>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -3,25 +3,28 @@
<sect1 id="language.syntax.quotes">
<title>Colocando Vari<72>veis em Aspas Duplas</title>
<para>
Smarty ir<69> reconhecer vari<72>veis entre aspas duplas enquanto
as vari<72>veis conterem apenas n<>meros, letras, sublinhados e conchetes
[]. Com qualquer outro caractere (pontos, referencia de objetos, etc.) as vari<72>veis
devem estar entre ap<61>strofos.
Smarty ir<69> reconhecer vari<72>veis definidas entre asplas duplas enquanto
as vari<72>veis conterem apenas n<>meros, letras, sublinhados e conchetes [].
Com qualquer outro caractere (pontos, refer<EFBFBD>ncia <EFBFBD> objetos, etc.) a vari<72>vel
deve estar entre ap<61>strofos.
</para>
<example>
<title>Sintaxe entre aspas</title>
<programlisting>
EXEMPLOS DE SINTAXE:
{func var="test $foo test"} &lt;-- v<> $foo
{func var="test $foo_bar test"} &lt;-- v<> $foo_bar
{func var="test $foo[0] test"} &lt;-- v<> $foo[0]
{func var="test $foo[bar] test"} &lt;-- v<> $foo[bar]
{func var="test $foo.bar test"} &lt;-- v<> $foo (not $foo.bar)
{func var="test `$foo.bar` test"} &lt;-- v<> $foo.bar
<![CDATA[
EXEMPLOS DE SYNTAX:
{func var="teste $foo teste"} <-- mostra $foo
{func var="teste $foo_bar teste"} <-- mostra $foo_bar
{func var="teste $foo[0] teste"} <-- mostra $foo[0]
{func var="teste $foo[bar] teste"} <-- mostra $foo[bar]
{func var="teste $foo.bar teste"} <-- mostra $foo (not $foo.bar)
{func var="teste `$foo.bar` teste"} <-- mostra $foo.bar
EXEMPLOS PRATICOS:
{include file="subdir/$tpl_name.tpl"} &lt;-- ir<69> substituir $tpl_name com o valor
{cycle values="one,two,`$smarty.config.myval`"} &lt;-- deve ter ap<61>strofos</programlisting>
EXEMPLOS PR<EFBFBD>TICOS:
{include file="subdir/$tpl_name.tpl"} <-- substitui $tpl_name pelo seu valor
{cycle values="one,two,`$smarty.config.myval`"} <-- deve conter ap<61>strofos
]]>
</programlisting>
</example>
</sect1>
<!-- Keep this comment at the end of the file

View File

@@ -2,11 +2,11 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: nobody Status: ready -->
<chapter id="language.builtin.functions">
<title>Fun<EFBFBD><EFBFBD>es Embutidas</title>
<title>Fun<EFBFBD><EFBFBD>es internas</title>
<para>
O Smarty vem com v<>rias fun<75><6E>es embutidas. Fun<75><6E>es embutidas fazem parte
da linguagem de template. Voc<6F> n<>o pode criar fun<75><6E>es personalizadas com
o mesmo nome, nem pode modificar as fun<EFBFBD><EFBFBD>es embutidas.
O Smarty cont<EFBFBD>m v<>rias fun<75><6E>es internas. Fun<75><6E>es internas s<>o parte integral
da linguagem de template. Voc<6F> n<>o pode criar fun<75><6E>es personalizadas com o
mesmo nome de uma fun<75><6E>o interna, e tamb<6D>m n<>o pode modificar fun<75><6E>es internas.
</para>
&designers.language-builtin-functions.language-function-capture;

View File

@@ -3,18 +3,20 @@
<chapter id="language.combining.modifiers">
<title>Combinando Modificadores</title>
<para>
Voc<6F> pode aplicar qualquer n<>mero de modificadores para uma vari<72>vel. Eles ser<65>o
aplicados na ordem que eles foram combinados, da esquerda para a direita. Eles
devem ser separados com um caractere <literal>|</literal> (pipe).
Voc<6F> pode aplicar a quantidade de moficadores que quiser <20> uma vari<72>vel. Eles ser<65>o aplicados
na ordem em que foram combinados, da esquerda para direita. Eles devem ser separados
com o caracter <literal>|</literal> (pipe).
</para>
<example>
<title>Combinando Modificadores</title>
<programlisting>
<title>combinando modificadores</title>
<programlisting role="php">
<![CDATA[
index.php:
<?php
$smarty = new Smarty;
$smarty-&gt;assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
$smarty-&gt;display('index.tpl');
$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
$smarty->display('index.tpl');
?>
index.tpl:
@@ -23,15 +25,20 @@ index.tpl:
{$articleTitle|lower|spacify|truncate}
{$articleTitle|lower|truncate:30|spacify}
{$articleTitle|lower|spacify|truncate:30:". . ."}
MOSTRA:
]]>
</programlisting>
<para>
O texto acima mostrar<61>:
</para>
<screen>
<![CDATA[
Smokers are Productive, but Death Cuts Efficiency.
S M O K E R S A R E P R O D U C T I V E , B U T D E A T H C U T S E F F I C I E N C Y .
s m o k e r s a r e p r o d u c t i v e , b u t d e a t h c u t s...
s m o k e r s a r e p r o d u c t i v e , b u t . . .
s m o k e r s a r e p. . .</programlisting>
s m o k e r s a r e p. . .
]]>
</screen>
</example>
</chapter>
<!-- Keep this comment at the end of the file

View File

@@ -3,7 +3,7 @@
<chapter id="language.custom.functions">
<title>Fun<EFBFBD><EFBFBD>es Personalizadas</title>
<para>
Smarty vem com v<>rias fun<75><6E>es personalizadas que voc<6F>
O Smarty cont<EFBFBD>m v<>rias fun<75><6E>es personalizadas que voc<6F>
pode usar em seus templates.
</para>
&designers.language-custom-functions.language-function-assign;

View File

@@ -3,55 +3,54 @@
<chapter id="language.modifiers">
<title>Modificadores de vari<72>veis</title>
<para>
Modificadores de vari<72>veis podem ser aplicados a vari<72>veis, fun<75><6E>es customizadas
Modificadores de vari<72>veis podem ser aplicados a vari<72>veis, fun<75><6E>es personalizadas
ou strings. Para aplicar um modificador, especifique o valor seguido por
<literal>|</literal>(pipe) e o nome do modificador. Um modificador aceita
par<61>metros adicionais que afetam o seu funcionamento. Estes par<61>metros seguem
par<61>metros adicionais que afetam o seu comportamento. Estes par<61>metros vem ap<61>s
o nome do modificador e s<>o separados por <literal>:</literal> (dois pontos).
</para>
<example>
<title>Exemplo de modificador</title>
<programlisting>
{* Transforma para mai<61>sculas *}
&lt;h2&gt;{$title|upper}&lt;/h2&gt;
<![CDATA[
{* Faz o t<>tulo ficar com letras mai<61>sculas *}
<h2>{$titulo|upper}</h2>
{* Trunca o $topic para 40 caracteres usa ... no final *}
Topic: {$topic|truncate:40:"..."}
{* Faz com que $topico use somente 40 caracteres, e coloca ... no fim da frase *}
{* formata uma string literal *}
{"now"|date_format:"%Y/%m/%d"}
T<EFBFBD>pico: {$topico|truncate:40:"..."}
{* aplica um modificador para uma fun<EFBFBD><EFBFBD>o customizada *}
{mailto|upper address="me@domain.dom"}</programlisting>
{* transforma a data em um formato leg<65>vel *}
{"agora"|date_format:"%Y/%m/%d"}
{* aplica um modificador <20> uma fun<75><6E>o personalizada *}
{mailto|upper address="eu@dominio.dom"}
]]>
</programlisting>
</example>
<para>
Se voc<6F> aplicar um modificador para uma matriz ao inv<6E>s de o valor de uma vari<72>vel,
o modificador vai ser aplicado em cada valor desta matriz. Se voc<6F> realmente quiser
que o funciona em uma matriz inteira, voc<6F> deve colocar um simbolo
<literal>@</literal> antes do nome do modificador, assim como:
<literal>{$articleTitle|@count}</literal> (isto ir<69> mostrar o n<>mero de elementos
na matriz $articleTitle.)
Se voc<6F> aplicar um modificador <EFBFBD> uma matriz ao inv<6E>s de aplicar ao valor de uma vari<72>vel,
o modificador vai ser aplicado <EFBFBD> cada valor da matriz especificada. Se voc<6F> quer que o modificador
use a matriz inteira como um valor, voc<6F> deve colocar o s<EFBFBD>mbolo <literal>@</literal> antes do
nome do modificador, como a seguir: <literal>{$tituloArtigo|@count}</literal>
(isto ir<69> mostrar o n<>mero de elementos na matriz $tituloArtigo).
</para>
<para>
Modificadores podem ser carregados automaticamente a partir do seu <link
linkend="variable.plugins.dir">$plugins_dir</link> (veja tamb<6D>m:
<link linkend="plugins.naming.conventions">Naming
Conventions</link>) ou podem ser registrados explicitamente (veja: <link
linkend="api.register.modifier">register_modifier</link>).
Adicionalmente, todas as fun<75><6E>es do php podem ser utilizadas como
modificadores implicitamente. (O exemplo
<literal>@count</literal> acima usa atualmente a fun<75><6E>o count
do php e n<>o um modificador do Smarty). Usar fun<75><6E>es do
php como modificadores tem dois pequenos problemas: Primeiro, algumas
vezes a ordem dos par<61>metros da fun<75><6E>o n<>o <20> a desejavel
(<literal>{"%2.f"|sprintf:$float}</literal> atualmente funciona, mas pede algo
mais intuitivo <literal>{Por exemplo:
$float|string_format:"%2.f"}</literal> que <20> provido pela distribui<75><69>o
do Smarty). Segundo: com <link
linkend="variable.security">$security</link> ativado, todas as fun<75><6E>es do
php que sejam utilizados como modificadores devem ser declaradas como
confi<66>veis na matriz <link linkend="variable.security.settings">
$security_settings['MODIFIER_FUNCS']</link>.
Modificadores podem ser carregados automaticamente <EFBFBD> partir do seu <link
linkend="variable.plugins.dir">$plugins_dir</link> (veja:
<link linkend="plugins.naming.conventions">Nomes sugeridos</link>) ou podem ser
registrados explicitamente (veja: <link
linkend="api.register.modifier">register_modifier</link>). Adicionalmente,
todas as fun<75><6E>es php podem ser utiliadas como modificadores implicitamente. (O
exemplo do <literal>@count</literal> acima usa a fun<75><6E>o count do php e n<>o
um modificador do Smarty). Usar fun<75><6E>es do php como modificadores tem dois
pequenos problemas: Primeiro: <20>s vezes a ordem dos par<61>metros da fun<75><6E>o
n<EFBFBD>o <20> a desejada (<literal>{"%2.f"|sprintf:$float}</literal> atualmente funciona,
mas o melhor seria algo mais intuitivo. Por exemplo: <literal>{$float|string_format:"%2.f"}</literal>
que <20> disponibilizado na distribui<75><69>o do Smarty). Segundo: com a vari<72>vel
<link linkend="variable.security">$security</link> ativada em todas as fun<75><6E>es do
php que s<>o usadas como modificadores precisam ser declaradas como confi<66>veis (trusted)
na matriz <link linkend="variable.security.settings">$security_settings['MODIFIER_FUNCS']</link>.
</para>
&designers.language-modifiers.language-modifier-capitalize;

View File

@@ -4,21 +4,21 @@
<chapter id="language.variables">
<title>Vari<EFBFBD>veis</title>
<para>
O Smarty tem v<>rios tipos diferentes de vari<72>veis. O tipo de vari<72>vel depende de
de qual s<>mbolo esta prefixada(ou cercada).
No Smarty h<EFBFBD> v<>rios tipos diferentes de vari<72>veis. O tipo da vari<72>vel depende do prefixo que
ela usa (ou do s<>mbolo pelo qual ela est<73> contida).
</para>
<para>
Vari<72>veis no Smarty podem ser mostradas diretamente ou usada como argumentos para
atributos de fun<75><6E>es e modificadores, dentro de express<73>es condicionais, etc.
Para mostrar uma vari<72>vel, simplesmente coloque ela entre delimitadores sendo que
ela seja a <20>nica coisa entre eles. Exemplos:
Vari<72>veis no Smarty podem tanto serem exibidas diretamente ou usadas como argumentos
para atributos de fun<75><6E>es e modificadores, dentro de express<73>es condicionais, etc.
Para que uma vari<72>vel seja exibida o nome dela deve estar dentro dos delimitadores
e n<>o pode conter nenhum outro caracter. Veja os exemplos abaixo:
<programlisting>
<![CDATA[
{$Name}
{$Nome}
{$Contacts[row].Phone}
{$Contatos[row].Telefone}
<body bgcolor="{#bgcolor#}">
<body bgcolor="{#cordefundo#}">
]]>
</programlisting>
</para>

View File

@@ -5,41 +5,45 @@
<chapter id="what.is.smarty">
<title>O que <20> o Smarty?</title>
<para>
Smarty uma ferramenta de template para PHP. Mais especificamente, ela facilita
uma forma control<EFBFBD>vel de separar a aplica<63><61>o l<>gica e o conte<74>do de sua apresenta<74><61>o.
Isto <20> melhor descrito em uma situa<75><61>o onde o programador da aplica<63><61>o e o designer
do template executam diferentes fun<75><6E>es, ou na maioria dos casos n<>o s<>o a mesma pessoa.
Por exemplo, digamos que voc<6F> est<EFBFBD> criando uma p<>gina que est<73> mostrando um artigo de
jornal. O autor, a manchete, a conclus<75>o e o corpo do artigo s<>o elementos de conte<74>do, eles
n<EFBFBD>o cont<6E>m informa<6D><61>o sobre como eles ser<EFBFBD>o apresentados. Eles s<>o passados para o Smarty
pela aplica<63><61>o, ent<6E>o o designer de template edita o template e usa uma combina<6E><61>o de tags
HTML e tags de template para formatar a apresenta<74><61>o destes elementos (tabelas HTML, cores
de planos de fundo, tamanhos da fonte, folhas de estilos, etc.).
Quando o programador necessita
mudar a forma em que o conte<74>do do artigo <20>
devolvido (uma mudan<61>a da l<>gica da aplica<63><61>o.) Esta
mudan<61>a n<EFBFBD>o afeta o designer do template, o conte<74>do ainda chegar<61> no template exatamente da
mesma forma. De modo semelhante, se o designer de template quer redesenhar completamente
o template, isto n<>o requer mudan<61>as na l<>gica da aplica<63><61>o. Ent<6E>o o programador pode fazer
mudan<61>as na l<>gica da aplica<63><61>o sem precisar reestruturar os templates,
e o designer de template
pode fazer mudan<61>as no template sem quebrar a l<>gica da aplica<63><61>o.
O Smarty <EFBFBD> um sistema de templates para PHP. Mais especificamente, ele fornece uma maneira
f<EFBFBD>cil de controlar a separa<EFBFBD><EFBFBD>o da aplica<63><61>o l<>gica e o conte<74>do de sua apresenta<74><61>o. Isto <20>
melhor descrito em uma situa<75><61>o onde o programador da aplica<63><61>o e o designer do template executam
diferentes fun<75><6E>es, ou na maioria dos casos n<>o s<>o a mesma pessoa. Por exemplo, digamos que voc<6F>
est<73> criando uma p<>gina para web para mostrar um artigo de um jornal. O autor, a manchete,
a conclus<75>o e o corpo do artigo s<>o elementos de conte<74>do, eles n<>o cont<6E>m informa<6D><61>o alguma
sobre como eles devem ser mostrados. Ele s<>o enviados ao Smarty pela aplica<63><61>o, ent<6E>o o designer
do template edita o template e usa uma combina<6E><61>o de tags HTML e tags de templates para formatar
a apresenta<74><61>o destes elementos (tabelas HTML, cores de fundo, tamanhos de fontes, folhas de estilos, etc.).
Se algum dia o programador precisar alterar a maneira como o conte<74>do do artigo <20> tratado (uma mudan<61>a na
l<EFBFBD>gica da aplica<63><61>o). Esta mudan<61>a n<>o afeta o design do template, o conte<74>do ser<65> enviado ao template
exatamente da mesma forma. De modo semelhante, se o designer do template quiser redesenhar completamente
os templates, n<>o <20> necess<73>ria nenhuma altera<72><61>o na l<>gica da aplica<63><61>o. Sendo assim, o programador
pode fazer mudan<EFBFBD>as na l<>gica da aplica<63><61>o sem a necessidade de reestruturar os templates, e o designer
do template pode fazer mudan<61>as nos templates sem alterar a l<>gica da aplica<63><61>o.
</para>
<para>
Um objetivo do projeto Smarty <20> a separa<72><61>o da l<>gica do neg<65>cio e da l<>gica da apresenta<74><61>o.
Isto significa que os templates podem certamente conter a l<>gica sob a circunst<73>ncia que <20> somente
para apresenta<74><61>o. Alguns exemplos s<>o: a inclus<75>o de outros templates, alterna<6E><61>o de cores nas linhas
das tabelas, colocar o texto de uma vari<72>vel em mai<61>sculo, percorrer uma matriz de dados e mostr<74>-la, etc.
s<>o todos exemplos de apresenta<74><61>o l<>gica. Isto n<>o significa que o Smarty for<6F>a a separa<72><61>o da l<>gica de
neg<65>cios e da l<>gica de apresenta<74><61>o. O Smarty n<>o tem conhecimento do que <20> o que em sua aplica<63><61>o, portanto
colocar sua a l<>gica de neg<65>cio no template <20> problema seu. Caso voc<6F> deseje que n<>o haja NENHUMA l<>gica
em seus templates voc<6F> pode certamente fazer isso trocando o conte<74>do para textos e vari<72>veis somente.
<!-- ficou legal o texto abaixo, mas n<>o segue exatamente toda tradu<64><75>o, espero aprova<76><61>o do meu acima, ou mistura entre os dois:
Agora um resumo sobre o que o Smarty faz e N<>O faz. O Smarty n<>o tenta separar completamente
a l<>gica dos templates. N<>o h<> problema com a l<>gica em seus templates sob a condi<64><69>o de que
esta l<>gica seja estritamente para apresenta<74><61>o. Uma palavra de aviso: mantenha a l<>gica
fora dos templates, e a l<>gica da apresenta<74><61>o fora da aplica<63><61>o. Isto definitivamente
manter<65> as coisas mais manipul<75>veis
e escal<61>veis para o futuro pr<70>ximo.
e escal<61>veis para o futuro pr<70>ximo. -->
</para>
<para>
Um dos aspectos <20>nicos sobre o Smarty <20> a compila<6C><61>o do template. Isto significa que o
Smarty l<> os arquivos de template e cria scripts PHP a partir deles. Uma vez criados, eles
s<EFBFBD>o executados. Ent<6E>o n<>o h<> interpreta<74><61>o de arquivo de
template custosa para cada pedido, e
cada template pode levar total vantagem de solu<6C><75>es de cache de compiladores PHP tais como
Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou PHP Accelerator
Um dos aspectos <20>nicos do Smarty <20> seu sistema de compila<6C><61>o de templates. O Smarty l<> os arquivos
de templates e cria scripts PHP <EFBFBD> partir deles. Uma vez criados, eles s<EFBFBD>o executados sem ser necess<73>rio
uma outra compila<6C><61>o do template novamente. Com isso, os arquivos de template n<>o s<>o 'parseados'(analisados)
toda vez que um template <20> solicitado, e cada template tem a total vantagem de solu<6C><75>es de cache do
compilador PHP, tais como: Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou PHP Accelerator
(<ulink url="&url.php-accelerator;">&url.php-accelerator;</ulink>).
</para>
<para>
@@ -47,25 +51,16 @@
</para>
<itemizedlist>
<listitem><para>Ele <20> extremamente r<>pido.</para></listitem>
<listitem><para>Ele <20> eficiente visto que
o interpretador de PHP faz o trabalho mais chato.</para></listitem>
<listitem><para>Ele <20> eficiente visto que o interpretador do PHP faz o trabalho mais pesado.</para></listitem>
<listitem><para>Sem elevadas interpreta<74><61>es de template, apenas compila uma vez.</para></listitem>
<listitem><para>Ele est<73> atento para s<> recompilar os arquivos de template que
foram mudados.</para></listitem>
<listitem><para>Voc<EFBFBD> pode criar <link linkend="language.custom.functions">fun<EFBFBD><EFBFBD>es customizadas
</link> e <link linkend="language.modifiers">modificadores de vari<72>veis
</link> customizados, de modo que a linguagem de template <20> extremamente extens<6E>vel.</para></listitem>
<listitem><para>Sintaxe de tag delimitadora de template configur<75>vel, assim voc<6F> pode usar
{}, {{}}, &lt;!--{}--&gt;, etc.</para></listitem>
<listitem><para>Os construtoress if/elseif/else/endif s<>o passados para o interpretador de PHP,
assim a sintaxe de express<73>o {if ...} pode ser tanto simples quanto complexa da forma que voc<6F>
queira.</para></listitem>
<listitem><para>Ele est<73> atento para s<> recompilar os arquivos de template que foram mudados.</para></listitem>
<listitem><para>Voc<EFBFBD> pode criar <link linkend="language.custom.functions">fun<EFBFBD><EFBFBD>es customizadas</link> e <link linkend="language.modifiers">modificadores de vari<72>veis</link> customizados, de modo que a linguagem de template <20> extremamente extens<6E>vel.</para></listitem>
<listitem><para>Delimitadores de tag configur<75>veis, sendo assim voc<6F> pode usar {}, {{}}, &lt;!--{}--&gt;, etc.</para></listitem>
<listitem><para>Os construtoress if/elseif/else/endif s<>o passados para o interpretador de PHP, assim a sintaxe de express<73>o {if ...} pode ser tanto simples quanto complexa da forma que voc<6F> queira.</para></listitem>
<listitem><para>Aninhamento ilimitado de sections, ifs, etc. permitidos.</para></listitem>
<listitem><para><EFBFBD> poss<73>vel embutir o c<>digo PHP diretamente em seus arquivos de template,
apesar de que isto pode n<>o ser necess<73>rio (n<>o recomendado)
visto que a ferramenta <20> t<>o customiz<69>vel.</para></listitem>
<listitem><para><EFBFBD> poss<73>vel embutir o c<>digo PHP diretamente em seus arquivos de template, apesar de que isto pode n<>o ser necess<73>rio (n<>o recomendado) visto que a ferramenta <20> t<>o customiz<69>vel.</para></listitem>
<listitem><para>Suporte de caching embutido</para></listitem>
<listitem><para>Fontes de template arbitr<74>rias</para></listitem>
<listitem><para>Fontes de template arbitr<74>rios</para></listitem>
<listitem><para>Fun<EFBFBD><EFBFBD>es de manipula<6C><61>o de cache customizadas</para></listitem>
<listitem><para>Arquitetura de Plugin</para></listitem>
</itemizedlist>
@@ -74,7 +69,7 @@
<title>Instala<EFBFBD><EFBFBD>o</title>
<sect1 id="installation.requirements">
<title>Requerimentos</title>
<title>Requisitos</title>
<para>
Smarty requer um servidor web rodando o PHP 4.0.6 superior.
</para>
@@ -84,7 +79,7 @@
<title>Instala<EFBFBD><EFBFBD>o B<>sica</title>
<para>
Instale os arquivos da biblioteca do Smarty que est<73>o no diret<65>rio /libs/ da
distribui<75><69>o. Estes s<>o os arquivos PHP que voc<6F> N<>O EDITARIA. Eles s<>o comuns
distribui<75><69>o. Estes s<>o os arquivos PHP que voc<6F> N<>O PRECISA editar. Eles s<>o comuns
a todas as aplica<63><61>es e eles s<> s<>o atualizados quando voc<6F> atualiza para uma nova
vers<72>o do Smarty.
</para>
@@ -96,19 +91,19 @@ Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/core/*.php (todos eles)
/plugins/*.php (todos eles)</screen>
/plugins/*.php (todos eles)
</screen>
</example>
<para>
O Smarty utiliza uma constante do PHP chamada <link
linkend="constant.smarty.dir">SMARTY_DIR</link> que <20> o caminho para diret<65>rio da
biblioteca do Smarty. Basicamente, se sua aplica<63><61>o pode encontrar o arquivo
<emphasis>Smarty.class.php</emphasis>, voc<6F> n<>o precisa definir o
SMARTY_DIR, Smarty encontrar<EFBFBD>-lo. Ent<6E>o, se <emphasis>Smarty.class.php</emphasis> n<EFBFBD>o est<73>
em seu include_path, ou voc<6F> n<>o fornece um caminho absoluto para ele em sua aplica<63><61>o, ent<6E>o
voc<6F> deve definir o SMARTY_DIR manualmente.
SMARTY_DIR <emphasis>deve</emphasis> incluir uma
barra de seguimento.
<emphasis>Smarty.class.php</emphasis>, voc<6F> n<>o precisa definir a constante
SMARTY_DIR, o Smarty ir<EFBFBD> localiz<69>-la sozinho. Sendo assim, se o arquivo <emphasis>Smarty.class.php</emphasis>
n<EFBFBD>o est<73> em seu include_path, ou voc<6F> n<>o fornece um caminho absoluto para ele em sua aplica<63><61>o, ent<6E>o
voc<6F> deve definir a constante SMARTY_DIR manualmente. A constante SMARTY_DIR <emphasis>deve</emphasis>
conter uma barra de seguimento.
</para>
<para>
Aqui est<73> um exemplo de como voc<6F> cria uma inst<73>ncia do Smarty em seus scripts PHP:
@@ -118,12 +113,13 @@ debug.tpl
<title>Cria uma inst<73>ncia Smarty do Smarty</title>
<screen>
require('Smarty.class.php');
$smarty = new Smarty;</screen>
$smarty = new Smarty;
</screen>
</example>
<para>
Tente rodar o script acima. Se voc<6F> obtiver um erro dizendo que o arquivo
<emphasis>Smarty.class.php</emphasis> file could not be found, voc<6F> tem que fazer uma
<emphasis>Smarty.class.php</emphasis> n<EFBFBD>o p<>de ser encontrado, voc<6F> tem que fazer uma
das coisas a seguir:
</para>
@@ -131,7 +127,8 @@ $smarty = new Smarty;</screen>
<title>Fornecer um caminho absoluto para o arquivo da biblioteca</title>
<screen>
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;</screen>
$smarty = new Smarty;
</screen>
</example>
<example>
@@ -141,7 +138,8 @@ $smarty = new Smarty;</screen>
// para o include_path e reinicie o servidor web.
// Ent<6E>o o c<>digo a seguir funcionaria:
require('Smarty.class.php');
$smarty = new Smarty;</screen>
$smarty = new Smarty;
</screen>
</example>
<example>
@@ -149,7 +147,8 @@ $smarty = new Smarty;</screen>
<screen>
define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;</screen>
$smarty = new Smarty;
</screen>
</example>
<para>
@@ -165,11 +164,10 @@ $smarty = new Smarty;</screen>
para cada aplica<63><61>o que utilizar<61> o Smarty.
</para>
<para>
Certifique-se que voc<6F> sabe a localiza<7A><61>o do document root do seu servidor web. Em nosso exemplo,
o document root <20> "/web/www.mydomain.com/docs/". Os diret<65>rios do Smarty
Certifique-se que voc<6F> sabe a localiza<7A><61>o do 'document root' do seu servidor web. Em nosso exemplo,
o 'document root' <20> "/web/www.mydomain.com/docs/". Os diret<65>rios do Smarty
s<> s<>o acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Ent<6E>o para
evitar qualquer preocupa<70><61>o com seguran<61>a,
<09> recomendado colocar estes diret<65>rios
evitar qualquer preocupa<70><61>o com seguran<61>a, <EFBFBD> recomendado colocar estes diret<65>rios
<emphasis>fora</emphasis> do document root.
</para>
<para>
@@ -181,10 +179,10 @@ $smarty = new Smarty;</screen>
"/web/www.mydomain.com/smarty/guestbook/".
</para>
<para>
Voc<6F> precisar<61> pelo menos de um arquivo dentro de seu document root, e que seja acessado pelo
Voc<6F> precisar<61> pelo menos de um arquivo dentro de seu 'document root', e que seja acessado pelo
navegador. N<>s chamamos nosso
script de "index.php", e o colocamos em um subdiret<65>rio dentro
do document root chamado "/guestbook/".
do 'document root' chamado "/guestbook/".
</para>
<note>
@@ -204,7 +202,7 @@ $smarty = new Smarty;</screen>
</para>
<example>
<title>Exemple de estrutura de arquivo</title>
<title>Exemplo de estrutura de arquivo</title>
<screen>
/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
@@ -218,7 +216,8 @@ $smarty = new Smarty;</screen>
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/
/web/www.mydomain.com/docs/guestbook/index.php</screen>
/web/www.mydomain.com/docs/guestbook/index.php
</screen>
</example>
<para>
@@ -238,7 +237,8 @@ chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/
</screen>
</example>
<note>
@@ -252,7 +252,7 @@ chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
</note>
<para>
N<>s precisamos criar o arquivoindex.tpl que o Smarty vai ler. Ele estar<61> localizado em seu
N<>s precisamos criar o arquivo index.tpl que o Smarty vai ler. Ele estar<61> localizado em seu
$template_dir.
</para>
@@ -262,7 +262,8 @@ chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
{* Smarty *}
Ol<EFBFBD>, {$nome}!</screen>
Ol<EFBFBD>, {$nome}!
</screen>
</example>
@@ -272,13 +273,12 @@ Ol
{* Smarty *} <20> um coment<6E>rio de template. Ele n<>o <20> exigido, mas <20> uma pr<70>tica boa
iniciar todos os seus arquivos de template com este com este coment<6E>rio. Isto faz com
que o arquivo seja reconhecido sem levar em considera<72><61>o a sua extens<6E>o. Por exemplo,
editores de texto poderiam reconhecer
o arquivo e habilitar ilumina<6E><61>o de sintaxe especial.
editores de texto poderiam reconhecer o arquivo e habilitar colora<72><61>o de sintaxe especial.
</para>
</note>
<para>
Agora vamos editar index.php. N<>s criaremos uma inst<73>ncia do Smarty, daremos valor <20>s vari<72>veis
Agora vamos editar index.php. N<>s criaremos uma inst<73>ncia do Smarty, atribuiremos valores <20>s vari<72>veis
de template e mostraremos o arquivo index.tpl. Em nosso ambiente de exemplo,
"/usr/local/lib/php/Smarty" <20> o nosso include_path. Certifique-se de ter feito o mesmo, ou use
caminhos absolutos.
@@ -287,7 +287,7 @@ Ol
<example>
<title>Editando /web/www.mydomain.com/docs/guestbook/index.php</title>
<screen>
// ler a biblioteca do Smarty
// carregar a biblioteca do Smarty
require('Smarty.class.php');
$smarty = new Smarty;
@@ -297,9 +297,10 @@ $smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
$smarty->assign('nome','Taniel');
$smarty->assign('nome','Thomas');
$smarty->display('index.tpl');</screen>
$smarty->display('index.tpl');
</screen>
</example>
<note>
@@ -308,30 +309,29 @@ $smarty->display('index.tpl');</screen>
Em nosso exemplo, n<>s estamos configurando caminhos absolutos para todos os diret<65>rios
do Smarty. Se '/web/www.mydomain.com/smarty/guestbook/' est<73> dentro de seu include_path
do PHP, ent<6E>o estas configura<72><61>es n<>o s<>o necess<73>rias. Entretanto, isto <20> mais eficiente
e (a experi<72>ncia mostra) tem menos tend<6E>ncia a erros em rela<6C><61>o <20> defini<6E><69>o de caminhos
absolutos. Isto garante que o
Smarty est<73> pegando arquivos do diret<65>rio que voc<6F> deseja.
e (a experi<72>ncia mostra) menos tend<6E>ncia a erros em rela<6C><61>o <20> defini<6E><69>o de caminhos
absolutos. Isto garante que o Smarty est<73> obtendo os arquivos dos diret<65>rios que voc<6F> deseja.
</para>
</note>
<para>
Agora l<EFBFBD> o arquivo index.php de seu navegador.
Voc<6F> veria "Ol<4F>, Taniel!"
Agora carregue o arquivo index.php em seu navegador.
Voc<6F> veria "Ol<4F>, Thomas!"
</para>
<para>
Voc<6F> completou a configura<72><61>o b<>sica para o Smarty!
</para>
</sect1>
<sect1 id="installing.smarty.extended">
<title>Expandindo a configura<72><61>o</title>
<title>Estendendo a configura<72><61>o</title>
<para>
Esta <20> uma continua<75><61>o da <link
linkend="installing.smarty.basic">instala<EFBFBD><EFBFBD>o b<>sica</link>,
por favor leia ela primeiro!
por favor leia a instala<6C><61>o b<>sica primeiro!
</para>
<para>
Uma forma um pouco mais flex<65>vel de configurar o Smarty <20> expandir a classe e inicializar seu ambiente de
Uma forma um pouco mais flex<65>vel de configurar o Smarty <20> estender a classe e inicializar seu ambiente de
Smarty. Ent<6E>o, ao inv<6E>s de configurar caminhos de diret<65>rios repetidamente, preencher as mesmas vari<72>veis,
etc., n<>s podemos fazer isso para facilitar. Vamos criar um novo diret<65>rio "/php/includes/guestbook/" e criar um
novo arquivo chamado "setup.php". Em nosso ambiente de exemplo, "/php/includes" est<73> em nosso
@@ -343,10 +343,10 @@ $smarty->display('index.tpl');</screen>
<title>Editando /php/includes/guestbook/setup.php</title>
<screen>
// l<EFBFBD> a biblioteca do Smarty
// carrega a biblioteca do Smarty
require('Smarty.class.php');
// O arquivo setup.php <20> uma boa forma para ler
// O arquivo setup.php <20> uma boa forma para carregar
// arquivos de bibliotecas da aplica<63><61>o exigida, e voc<6F> pode fazer
// isso corretamente aqui. Um exemplo:
// require('guestbook/guestbook.lib.php');
@@ -368,7 +368,8 @@ class Smarty_GuestBook extends Smarty {
$this->assign('app_name','Guest Book');
}
}</screen>
}
</screen>
</example>
<para>
@@ -383,13 +384,14 @@ require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('nome','Taniel');
$smarty->assign('nome','Thomas');
$smarty->display('index.tpl');</screen>
$smarty->display('index.tpl');
</screen>
</example>
<para>
Agora voc<6F> ver que <20> completamente simples criar uma inst<73>ncia do Smarty, apenas use
Agora voc<6F> pode ver que <20> extremamente simples criar uma inst<73>ncia do Smarty, apenas use
Smarty_GuestBook que automaticamente inicializa tudo para a nossa aplica<63><61>o.
</para>

View File

@@ -2,69 +2,61 @@
<preface id="preface">
<title>Pref<EFBFBD>cio</title>
<para>
Esta <20> uma das d<EFBFBD>vidas mais frenquentes na "mailing list" do PHP:
Como eu posso fazer PHP scripts independentes do layout ? Enquanto
PHP est<73> contado como "HTML linguagem de blocos din<69>micos", ap<61>s estar
escrevendo alguns projetos que misturavam PHP e HTML livremente algu<67>m veio com a
id<EFBFBD>ia que a separa<72><61>o do form e conte<74>do <20> uma boa pr<70>tica [TM]. Al<41>m disso,
em muitas empresas os pap<61>is de web designer e programador s<>o separados.
Consequentemente, a procura por
uma solu<6C><75>o de template continua.
Esta <20> sem d<>vida uma das perguntas mais freq<EFBFBD>entes nas listas de discuss<73>es sobre PHP:
como eu fa<EFBFBD>o meus scripts em PHP independentes do layout? O PHP <20> vendido como sendo uma
"linguagem de script embutida no HTML", ap<61>s escrever alguns projetos que misturam HTML e
PHP naturalmente vem uma id<69>ia de que a separa<72><61>o da forma e conte<74>do <20> uma boa pr<70>tica [TM].
Al<EFBFBD>m disso, em muitas empresas os pap<61>is de designer e programador s<>o separados.
Conseq<EFBFBD>entemente, a busca por um sistema de templates continua.
</para>
<para>
Na minha pr<70>pria empresa por exemplo, o desenvolvimento de uma aplica<63><61>o
continua como segue: Ap<41>s a documenta<74><61>o necess<73>ria estar pronta, o web designer
faz a maquete da interface e entrega isso ao programador. O programador implementa
as regras de neg<65>cio no PHP e usa a maquete para criar o "esqueleto" do template.
O projeto est<73> ent<6E>o nas m<>os da pessoa respons<6E>vel pelo layout HTML designer/web page
que produz o template para sua gl<67>ria completa. O projeto deve ir e voltar
entre programa<6D><61>o/HTML v<>rias vezes. Desta maneira, <20> importante para ter
um bom suporte de template porque programadores n<>o querem fazer nada
com HTML e n<>o querem HTML designers fazendo besteiras no c<>digo PHP.
Designers precisam de suporte para arquivos de configura<72><61>o, blocos din<69>micos e
outras interfaces usadas, mas eles n<>o querem ocupar-se com
as complexidades da linguagem
de programa<6D><61>o PHP.
Na nossa empresa por exemplo, o desenvolvimento de uma aplica<63><61>o <20> feito da seguinte
maneira: Ap<41>s a documenta<74><61>o necess<73>ria estar pronta, o designer faz o esbo<62>o da interface
e entrega ao programador. O programador implementa as regras de neg<65>cio no PHP e usa o
esbo<EFBFBD>o da interface para criar o esqueleto dos templates. O projeto ent<6E>o est<73> nas m<>os
da pessoa respons<6E>vel pelo layout HTML da p<>gina que ent<6E>o transforma o esbo<62>o em um layout
realmente funcional. O projeto talvez v<> e volte entre programa<6D><61>o/designer HTML v<>rias vezes.
Por<EFBFBD>m, <20> importante ter um bom suporte <20> templates porque os programadores n<>o querem ter que
ficar mexendo com HTML e n<>o querem que os designers estraguem seus c<>digos PHP. Os designers
precisam de ajuda para alterar os arquivos de configura<72><61>o, blocos din<69>micos e outros
problemas relacionados <20> interface usada, mas eles n<>o querem ocupar-se com as complexidades
da linguagem de programa<6D><61>o PHP.
</para>
<para>
Olhando para muitas solu<6C><75>es de template para PHP dispon<6F>veis atualmente,
a maioria destes disponibiliza uma forma rudimentar de substitui<75><69>o de vari<72>veis
dentro de templates e fazem um form limitado de blocos din<69>micos de funcionalidades.
Mas minhas necessidades pr<EFBFBD>prias requisitam um pouco mais do que isso.
N<EFBFBD>s n<>o queremos programadores mexendo com layout HTML em tudo, mas isso foi quase inevit<69>vel.
Por exemplo, se um designer quiser cores no background alternando-se em blocos din<69>micos,
isso tem que ser feito pelo programador antecipadamente. N<>s tamb<6D>m
precisamos que designers estejam habilitados a usar seus pr<70>prios arquivos de configura<72><61>o,
e colocar vari<72>veis deles dentro dos templates. A lista continua.
Analisando muitas das solu<EFBFBD><EFBFBD>es de templates dispon<6F>veis para PHP hoje em dia, a
maioria somente disponibilizada uma forma rudimentar de substitui<75><69>o de vari<72>veis
dentro dos templates e trabalham de forma limitada com as funcionalidades dos blocos
din<EFBFBD>micos. Mas nossas necessidades necessitam de um pouco mais do que isso. N<EFBFBD>s n<>o
quer<EFBFBD>amos que programadores mexendo com layout em HTML, mas isso <EFBFBD> praticamente inevit<69>vel.
Por exemplo, se um designer quiser que as cores de fundo se alternam em blocos din<69>micos,
isso tem que ser feito pelo programador antecipadamente. N<>s tamb<6D>m precisamos que os designers
possam usar seus pr<70>prios arquivos de configura<72><61>o, e usar as vari<72>veis definidas nestes arquivos
em seus templates. E a lista de necessidades continua...
</para>
<para>
N<>s iniciamos escrevendo por acaso um template engine por volta de 1999.
Ap<41>s o t<>rmino, n<>s come<6D>amos a trabalhar num template engine
escrito em C que esperan<61>osamente foi aceito para ser incluso com PHP.
N<EFBFBD>s n<>o somente encontramos algumas complicadas barreiras t<>cnicas, mas
houve tamb<6D>m calorosos debates sobre exatamente o que um template engine devia
e n<>o devia fazer. Desta experi<72>ncia, n<>s decidimos que o template
engine deveria ser escrito em PHP como uma classe, para qualquer um usar da mesma forma
como eles v<>em. Ent<6E>o n<>s escrevemos um engine que o
<productname>SmartTemplate</productname> nunca veio a existir (note: essa
classe nunca foi enviada ao p<>blico). Ela foi uma classe que
fazia quase tudo que gostar<61>amos: substitui<75><69>o de vari<72>veis regular, suporte <20>
inclus<EFBFBD>o de outros templates, integra<72><61>o com arquivos de configura<72><61>o, c<>digo PHP
embutido, funcionalidade 'if' limitada e muito mais blocos din<69>micos robustos
que poderia ser aninhados muitas vezes. Tudo isso com express<73>es regulares
e o c<>digo produzido ser<65> melhor, como n<>s diremos,
impenetr<EFBFBD>vel. Isso era tamb<6D>m notoriamente lento em grandes aplica<63><61>es para todos
as interpreta<74><61>es e express<73>es regulares trabalhando em cada requisi<73><69>o.
O maior problema do ponto de vista de um programador foi toda a
necessidade de trabalhar no processamento de scripts PHP e processamento
de blocos din<69>micos de templates. Como n<>s fazemos isso facilmente?
N<>s come<EFBFBD>amos <20> escrever as especifica<63><61>es para um sistema de templates por volta de 1999.
Ap<41>s o t<>rmino das especifica<63><61>es, n<>s come<6D>amos a escrever um sistema de template em C
que esper<65>vamos ser aceito para rodar com o PHP. N<>o s<> esbarramos em muitas barreiras
t<EFBFBD>cnicas, como tamb<6D>m houve um enorme debate sobre o que exatamente um sistema de template
deveria ou n<>o fazer. <20> partir desta experi<72>ncia, n<>s decidimos que o sistema de template
fosse escrito para ser uma classe do PHP, para que qualquer um usa-se da forma que lhe fosse
mais conveniente, ent<6E>o n<>s escrevemos um sistema que fazia exatamente, foi a<> que surgiu o
<productname>SmartTemplate</productname> (obs: esta classe nunca foi enviada ao p<>blico).
Foi uma classe que fez quase tudo que n<>s quer<65>amos: substitui<75><69>o de vari<72>veis, suporte <20>
inclus<EFBFBD>o de outros templates, integra<72><61>o com arquivos de configura<72><61>o, c<>digo PHP embutido,
funcionalidades 'if' limitada e blocos din<69>micos muito mais robustos que poderiam ser aninhados
muitas vezes. Foi tudo feito usando express<73>es reguladores e c<>digos confusos, como dir<69>amos,
impenetr<EFBFBD>vel. Era um sistema tamb<6D>m extremamente lento em grandes aplicativos por causa de todo
o trabalho que era feito pelas express<73>es regulares e o 'parsing'(interpreta<74><61>o) em cada chamada
ao aplicativo. O maior problema do ponto de vista de um programador foi o espantoso trabalho que
era necess<73>rio para configurar e processar os blocos din<69>micos dos templates. Como far<61>amos
esse sistema ser simples de usar?
</para>
<para>
Ent<EFBFBD>o vem a vis<69>o do que ultimamente virou a Smarty. N<>s sabemos qu<71>o r<EFBFBD>pido
<20> um c<>digo PHP sem o overhead da interpreta<74><61>o do template. N<>s tamb<6D>m sabemos
qu<71>o meticuloso e autorit<EFBFBD>ria a linguagem PHP deve ser ao olhar de um designer,
e isso poderia ser mascarado com uma simples sintaxe de template.
Ent<EFBFBD>o o que acontece se n<>s combinarmos
estas duas for<6F>as? Desta maneira, Smarty nasceu...
Foi ent<6E>o que veio a vis<69>o do que hoje <20> conhecido como Smarty. N<>s sabemos o qu<EFBFBD>o
r<EFBFBD>pido <EFBFBD> um c<>digo PHP sem o sobrecarregamento de um sistema de templates. N<>s tamb<6D>m
sabemos qu<EFBFBD>o meticuloso e assustador <20> a linguagem PHP aos olhos de um designer atual,
e isso tudo poderia ser mascarado usando uma sintaxe simples nos templates. Ent<6E>o o que
acontece se n<>s combinarmos essas duas for<6F>as? Assim, nasceu o Smarty...
</para>
</preface>