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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,18 +3,20 @@
<chapter id="language.combining.modifiers"> <chapter id="language.combining.modifiers">
<title>Combinando Modificadores</title> <title>Combinando Modificadores</title>
<para> <para>
Voc<6F> pode aplicar qualquer n<>mero de modificadores para uma vari<72>vel. Eles ser<65>o Voc<6F> pode aplicar a quantidade de moficadores que quiser <20> uma vari<72>vel. Eles ser<65>o aplicados
aplicados na ordem que eles foram combinados, da esquerda para a direita. Eles na ordem em que foram combinados, da esquerda para direita. Eles devem ser separados
devem ser separados com um caractere <literal>|</literal> (pipe). com o caracter <literal>|</literal> (pipe).
</para> </para>
<example> <example>
<title>Combinando Modificadores</title> <title>combinando modificadores</title>
<programlisting> <programlisting role="php">
<![CDATA[
index.php: index.php:
<?php
$smarty = new Smarty; $smarty = new Smarty;
$smarty-&gt;assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.'); $smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
$smarty-&gt;display('index.tpl'); $smarty->display('index.tpl');
?>
index.tpl: index.tpl:
@@ -23,16 +25,21 @@ index.tpl:
{$articleTitle|lower|spacify|truncate} {$articleTitle|lower|spacify|truncate}
{$articleTitle|lower|truncate:30|spacify} {$articleTitle|lower|truncate:30|spacify}
{$articleTitle|lower|spacify|truncate:30:". . ."} {$articleTitle|lower|spacify|truncate:30:". . ."}
]]>
</programlisting>
MOSTRA: <para>
O texto acima mostrar<61>:
</para>
<screen>
<![CDATA[
Smokers are Productive, but Death Cuts Efficiency. 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 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 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 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. . .
</example> ]]>
</screen>
</example>
</chapter> </chapter>
<!-- Keep this comment at the end of the file <!-- Keep this comment at the end of the file
Local variables: Local variables:

View File

@@ -3,8 +3,8 @@
<chapter id="language.custom.functions"> <chapter id="language.custom.functions">
<title>Fun<EFBFBD><EFBFBD>es Personalizadas</title> <title>Fun<EFBFBD><EFBFBD>es Personalizadas</title>
<para> <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. pode usar em seus templates.
</para> </para>
&designers.language-custom-functions.language-function-assign; &designers.language-custom-functions.language-function-assign;
&designers.language-custom-functions.language-function-counter; &designers.language-custom-functions.language-function-counter;

View File

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

View File

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

View File

@@ -5,41 +5,45 @@
<chapter id="what.is.smarty"> <chapter id="what.is.smarty">
<title>O que <20> o Smarty?</title> <title>O que <20> o Smarty?</title>
<para> <para>
Smarty uma ferramenta de template para PHP. Mais especificamente, ela facilita O Smarty <EFBFBD> um sistema de templates para PHP. Mais especificamente, ele fornece uma maneira
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. 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>
Isto <20> melhor descrito em uma situa<75><61>o onde o programador da aplica<63><61>o e o designer melhor descrito em uma situa<75><61>o onde o programador da aplica<63><61>o e o designer do template executam
do template executam diferentes fun<75><6E>es, ou na maioria dos casos n<>o s<>o a mesma pessoa. diferentes fun<75><6E>es, ou na maioria dos casos n<>o s<>o a mesma pessoa. Por exemplo, digamos que voc<6F>
Por exemplo, digamos que voc<6F> est<EFBFBD> criando uma p<>gina que est<73> mostrando um artigo de est<73> criando uma p<>gina para web para mostrar um artigo de um jornal. O autor, a manchete,
jornal. O autor, a manchete, a conclus<75>o e o corpo do artigo s<>o elementos de conte<74>do, eles 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
n<EFBFBD>o cont<6E>m informa<6D><61>o sobre como eles ser<EFBFBD>o apresentados. Eles s<>o passados para o Smarty sobre como eles devem ser mostrados. Ele s<>o enviados ao Smarty pela aplica<63><61>o, ent<6E>o o designer
pela aplica<63><61>o, ent<6E>o o designer de template edita o template e usa uma combina<6E><61>o de tags do template edita o template e usa uma combina<6E><61>o de tags HTML e tags de templates para formatar
HTML e tags de template para formatar a apresenta<74><61>o destes elementos (tabelas HTML, cores a apresenta<74><61>o destes elementos (tabelas HTML, cores de fundo, tamanhos de fontes, folhas de estilos, etc.).
de planos de fundo, tamanhos da fonte, 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
Quando o programador necessita 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
mudar a forma em que o conte<74>do do artigo <20> exatamente da mesma forma. De modo semelhante, se o designer do template quiser redesenhar completamente
devolvido (uma mudan<61>a da l<>gica da aplica<63><61>o.) Esta 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
mudan<61>a n<EFBFBD>o afeta o designer do template, o conte<74>do ainda chegar<61> no template exatamente da pode fazer mudan<EFBFBD>as na l<>gica da aplica<63><61>o sem a necessidade de reestruturar os templates, e o designer
mesma forma. De modo semelhante, se o designer de template quer redesenhar completamente do template pode fazer mudan<61>as nos templates sem alterar a l<>gica da aplica<63><61>o.
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.
</para> </para>
<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 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 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 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 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 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>
<para> <para>
Um dos aspectos <20>nicos sobre o Smarty <20> a compila<6C><61>o do template. Isto significa que o Um dos aspectos <20>nicos do Smarty <20> seu sistema de compila<6C><61>o de templates. O Smarty l<> os arquivos
Smarty l<> os arquivos de template e cria scripts PHP a partir deles. Uma vez criados, eles de templates e cria scripts PHP <EFBFBD> partir deles. Uma vez criados, eles s<EFBFBD>o executados sem ser necess<73>rio
s<EFBFBD>o executados. Ent<6E>o n<>o h<> interpreta<74><61>o de arquivo de uma outra compila<6C><61>o do template novamente. Com isso, os arquivos de template n<>o s<>o 'parseados'(analisados)
template custosa para cada pedido, e toda vez que um template <20> solicitado, e cada template tem a total vantagem de solu<6C><75>es de cache do
cada template pode levar total vantagem de solu<6C><75>es de cache de compiladores PHP tais como compilador PHP, tais como: Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou PHP Accelerator
Zend Accelerator (<ulink url="&url.zend;">&url.zend;</ulink>) ou PHP Accelerator
(<ulink url="&url.php-accelerator;">&url.php-accelerator;</ulink>). (<ulink url="&url.php-accelerator;">&url.php-accelerator;</ulink>).
</para> </para>
<para> <para>
@@ -47,25 +51,16 @@
</para> </para>
<itemizedlist> <itemizedlist>
<listitem><para>Ele <20> extremamente r<>pido.</para></listitem> <listitem><para>Ele <20> extremamente r<>pido.</para></listitem>
<listitem><para>Ele <20> eficiente visto que <listitem><para>Ele <20> eficiente visto que o interpretador do PHP faz o trabalho mais pesado.</para></listitem>
o interpretador de PHP faz o trabalho mais chato.</para></listitem>
<listitem><para>Sem elevadas interpreta<74><61>es de template, apenas compila uma vez.</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 <listitem><para>Ele est<73> atento para s<> recompilar os arquivos de template que foram mudados.</para></listitem>
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>Voc<EFBFBD> pode criar <link linkend="language.custom.functions">fun<EFBFBD><EFBFBD>es customizadas <listitem><para>Delimitadores de tag configur<75>veis, sendo assim voc<6F> pode usar {}, {{}}, &lt;!--{}--&gt;, etc.</para></listitem>
</link> e <link linkend="language.modifiers">modificadores de vari<72>veis <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>
</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>Aninhamento ilimitado de sections, ifs, etc. permitidos.</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, <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>
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>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>Fun<EFBFBD><EFBFBD>es de manipula<6C><61>o de cache customizadas</para></listitem>
<listitem><para>Arquitetura de Plugin</para></listitem> <listitem><para>Arquitetura de Plugin</para></listitem>
</itemizedlist> </itemizedlist>
@@ -74,7 +69,7 @@
<title>Instala<EFBFBD><EFBFBD>o</title> <title>Instala<EFBFBD><EFBFBD>o</title>
<sect1 id="installation.requirements"> <sect1 id="installation.requirements">
<title>Requerimentos</title> <title>Requisitos</title>
<para> <para>
Smarty requer um servidor web rodando o PHP 4.0.6 superior. Smarty requer um servidor web rodando o PHP 4.0.6 superior.
</para> </para>
@@ -84,7 +79,7 @@
<title>Instala<EFBFBD><EFBFBD>o B<>sica</title> <title>Instala<EFBFBD><EFBFBD>o B<>sica</title>
<para> <para>
Instale os arquivos da biblioteca do Smarty que est<73>o no diret<65>rio /libs/ da 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 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. vers<72>o do Smarty.
</para> </para>
@@ -96,19 +91,19 @@ Smarty_Compiler.class.php
Config_File.class.php Config_File.class.php
debug.tpl debug.tpl
/core/*.php (todos eles) /core/*.php (todos eles)
/plugins/*.php (todos eles)</screen> /plugins/*.php (todos eles)
</screen>
</example> </example>
<para> <para>
O Smarty utiliza uma constante do PHP chamada <link 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 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 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 <emphasis>Smarty.class.php</emphasis>, voc<6F> n<>o precisa definir a constante
SMARTY_DIR, Smarty encontrar<EFBFBD>-lo. Ent<6E>o, se <emphasis>Smarty.class.php</emphasis> n<EFBFBD>o est<73> SMARTY_DIR, o Smarty ir<EFBFBD> localiz<69>-la sozinho. Sendo assim, se o arquivo <emphasis>Smarty.class.php</emphasis>
em seu include_path, ou voc<6F> n<>o fornece um caminho absoluto para ele em sua aplica<63><61>o, ent<6E>o 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. voc<6F> deve definir a constante SMARTY_DIR manualmente. A constante SMARTY_DIR <emphasis>deve</emphasis>
SMARTY_DIR <emphasis>deve</emphasis> incluir uma conter uma barra de seguimento.
barra de seguimento.
</para> </para>
<para> <para>
Aqui est<73> um exemplo de como voc<6F> cria uma inst<73>ncia do Smarty em seus scripts PHP: 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> <title>Cria uma inst<73>ncia Smarty do Smarty</title>
<screen> <screen>
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</screen>
</example> </example>
<para> <para>
Tente rodar o script acima. Se voc<6F> obtiver um erro dizendo que o arquivo 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: das coisas a seguir:
</para> </para>
@@ -131,7 +127,8 @@ $smarty = new Smarty;</screen>
<title>Fornecer um caminho absoluto para o arquivo da biblioteca</title> <title>Fornecer um caminho absoluto para o arquivo da biblioteca</title>
<screen> <screen>
require('/usr/local/lib/php/Smarty/Smarty.class.php'); require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</screen>
</example> </example>
<example> <example>
@@ -141,7 +138,8 @@ $smarty = new Smarty;</screen>
// para o include_path e reinicie o servidor web. // para o include_path e reinicie o servidor web.
// Ent<6E>o o c<>digo a seguir funcionaria: // Ent<6E>o o c<>digo a seguir funcionaria:
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</screen>
</example> </example>
<example> <example>
@@ -149,7 +147,8 @@ $smarty = new Smarty;</screen>
<screen> <screen>
define('SMARTY_DIR','/usr/local/lib/php/Smarty/'); define('SMARTY_DIR','/usr/local/lib/php/Smarty/');
require(SMARTY_DIR.'Smarty.class.php'); require(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty;</screen> $smarty = new Smarty;
</screen>
</example> </example>
<para> <para>
@@ -165,11 +164,10 @@ $smarty = new Smarty;</screen>
para cada aplica<63><61>o que utilizar<61> o Smarty. para cada aplica<63><61>o que utilizar<61> o Smarty.
</para> </para>
<para> <para>
Certifique-se que voc<6F> sabe a localiza<7A><61>o do document root do seu servidor web. Em nosso exemplo, 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 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 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, evitar qualquer preocupa<70><61>o com seguran<61>a, <EFBFBD> recomendado colocar estes diret<65>rios
<09> recomendado colocar estes diret<65>rios
<emphasis>fora</emphasis> do document root. <emphasis>fora</emphasis> do document root.
</para> </para>
<para> <para>
@@ -181,10 +179,10 @@ $smarty = new Smarty;</screen>
"/web/www.mydomain.com/smarty/guestbook/". "/web/www.mydomain.com/smarty/guestbook/".
</para> </para>
<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 navegador. N<>s chamamos nosso
script de "index.php", e o colocamos em um subdiret<65>rio dentro script de "index.php", e o colocamos em um subdiret<65>rio dentro
do document root chamado "/guestbook/". do 'document root' chamado "/guestbook/".
</para> </para>
<note> <note>
@@ -204,7 +202,7 @@ $smarty = new Smarty;</screen>
</para> </para>
<example> <example>
<title>Exemple de estrutura de arquivo</title> <title>Exemplo de estrutura de arquivo</title>
<screen> <screen>
/usr/local/lib/php/Smarty/Smarty.class.php /usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.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/configs/
/web/www.mydomain.com/smarty/guestbook/cache/ /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> </example>
<para> <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/ chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/
chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/ 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> </example>
<note> <note>
@@ -252,7 +252,7 @@ chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
</note> </note>
<para> <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. $template_dir.
</para> </para>
@@ -262,7 +262,8 @@ chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/</screen>
{* Smarty *} {* Smarty *}
Ol<EFBFBD>, {$nome}!</screen> Ol<EFBFBD>, {$nome}!
</screen>
</example> </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 {* 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 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, que o arquivo seja reconhecido sem levar em considera<72><61>o a sua extens<6E>o. Por exemplo,
editores de texto poderiam reconhecer editores de texto poderiam reconhecer o arquivo e habilitar colora<72><61>o de sintaxe especial.
o arquivo e habilitar ilumina<6E><61>o de sintaxe especial.
</para> </para>
</note> </note>
<para> <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, 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 "/usr/local/lib/php/Smarty" <20> o nosso include_path. Certifique-se de ter feito o mesmo, ou use
caminhos absolutos. caminhos absolutos.
@@ -287,7 +287,7 @@ Ol
<example> <example>
<title>Editando /web/www.mydomain.com/docs/guestbook/index.php</title> <title>Editando /web/www.mydomain.com/docs/guestbook/index.php</title>
<screen> <screen>
// ler a biblioteca do Smarty // carregar a biblioteca do Smarty
require('Smarty.class.php'); require('Smarty.class.php');
$smarty = new Smarty; $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->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/'; $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> </example>
<note> <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 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 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 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 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 absolutos. Isto garante que o Smarty est<73> obtendo os arquivos dos diret<65>rios que voc<6F> deseja.
Smarty est<73> pegando arquivos do diret<65>rio que voc<6F> deseja.
</para> </para>
</note> </note>
<para> <para>
Agora l<EFBFBD> o arquivo index.php de seu navegador. Agora carregue o arquivo index.php em seu navegador.
Voc<6F> veria "Ol<4F>, Taniel!" Voc<6F> veria "Ol<4F>, Thomas!"
</para> </para>
<para> <para>
Voc<6F> completou a configura<72><61>o b<>sica para o Smarty! Voc<6F> completou a configura<72><61>o b<>sica para o Smarty!
</para> </para>
</sect1> </sect1>
<sect1 id="installing.smarty.extended"> <sect1 id="installing.smarty.extended">
<title>Expandindo a configura<72><61>o</title> <title>Estendendo a configura<72><61>o</title>
<para> <para>
Esta <20> uma continua<75><61>o da <link Esta <20> uma continua<75><61>o da <link
linkend="installing.smarty.basic">instala<EFBFBD><EFBFBD>o b<>sica</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>
<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, 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 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 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> <title>Editando /php/includes/guestbook/setup.php</title>
<screen> <screen>
// l<EFBFBD> a biblioteca do Smarty // carrega a biblioteca do Smarty
require('Smarty.class.php'); 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 // arquivos de bibliotecas da aplica<63><61>o exigida, e voc<6F> pode fazer
// isso corretamente aqui. Um exemplo: // isso corretamente aqui. Um exemplo:
// require('guestbook/guestbook.lib.php'); // require('guestbook/guestbook.lib.php');
@@ -368,7 +368,8 @@ class Smarty_GuestBook extends Smarty {
$this->assign('app_name','Guest Book'); $this->assign('app_name','Guest Book');
} }
}</screen> }
</screen>
</example> </example>
<para> <para>
@@ -383,13 +384,14 @@ require('guestbook/setup.php');
$smarty = new Smarty_GuestBook; $smarty = new Smarty_GuestBook;
$smarty->assign('nome','Taniel'); $smarty->assign('nome','Thomas');
$smarty->display('index.tpl');</screen> $smarty->display('index.tpl');
</screen>
</example> </example>
<para> <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. Smarty_GuestBook que automaticamente inicializa tudo para a nossa aplica<63><61>o.
</para> </para>

View File

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