mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 10:54:27 +02:00
committing portuguese docs updates from Thomas Gonzalez Miranda
This commit is contained in:
@@ -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>
|
||||
|
@@ -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 "&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 "&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 &nbsp; quando uma vari<72>vel est<73> vazia</title>
|
||||
<programlisting>
|
||||
|
||||
<![CDATA[
|
||||
{* A forma mais longa *}
|
||||
|
||||
{if $title eq ""}
|
||||
{if $titulo eq ""}
|
||||
&nbsp;
|
||||
{else}
|
||||
{$title}
|
||||
{$titulo}
|
||||
{/if}
|
||||
|
||||
|
||||
{* A forma mais simples *}
|
||||
|
||||
{$title|default:"&nbsp;"}</programlisting>
|
||||
{$titulo|default:"&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
|
||||
----------
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>{$titulo|default:"BC News"}</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>{$title|default:"BC News"}</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
|
||||
|
||||
footer.tpl
|
||||
----------
|
||||
</BODY>
|
||||
</HTML></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 < $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"}
|
||||
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
||||
|
||||
<!-- begin new wml deck -->
|
||||
<wml>
|
||||
<!-- begin first card -->
|
||||
<card>
|
||||
<do type="accept">
|
||||
<go href="#two"/>
|
||||
</do>
|
||||
<p>
|
||||
<!-- 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...
|
||||
</p>
|
||||
</card>
|
||||
<!-- begin second card -->
|
||||
<card id="two">
|
||||
<p>
|
||||
</p>
|
||||
</card>
|
||||
<!-- begin second card -->
|
||||
<card id="two">
|
||||
<p>
|
||||
Bem f<>cil isso, n<>o <20>?
|
||||
</p>
|
||||
</card>
|
||||
</wml></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 & 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,&$ticker_name,&$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
|
||||
---------------
|
||||
|
||||
<?php
|
||||
// configura nossa fun<75><6E>o para buscar os dados armazenados
|
||||
function fetch_ticker($symbol,&$ticker_name,&$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);
|
||||
?>
|
||||
|
||||
$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>
|
||||
|
@@ -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>
|
||||
|
@@ -21,6 +21,9 @@
|
||||
<author>
|
||||
<firstname>Taniel</firstname><surname>Franklin <taniel@ig.com.br></surname>
|
||||
</author>
|
||||
<author>
|
||||
<firstname>Thomas</firstname><surname>Thomas Gonzalez Miranda <thomasgm@php.net></surname>
|
||||
</author>
|
||||
</authorgroup>
|
||||
<pubdate>&build-date;</pubdate>
|
||||
<copyright>
|
||||
|
@@ -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>
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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->bar-$bar[1]*$baz->foo->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
|
||||
|
@@ -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}
|
||||
|
||||
<SELECT name=company>
|
||||
<select name="empresa">
|
||||
{html_options values=$vals selected=$selected output=$output}
|
||||
</SELECT></programlisting>
|
||||
</select>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the 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 *}
|
||||
<SELECT name=company>
|
||||
{* mostra lista dropdown *}
|
||||
<select name="empresa">
|
||||
{html_options values=$vals selected=$selected output=$output}
|
||||
</SELECT></programlisting>
|
||||
</select>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<!-- Keep this comment at the end of the 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, <font color="{#fontColor#}">{$name}!</font>
|
||||
{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
|
||||
|
@@ -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"} <-- v<> $foo
|
||||
{func var="test $foo_bar test"} <-- v<> $foo_bar
|
||||
{func var="test $foo[0] test"} <-- v<> $foo[0]
|
||||
{func var="test $foo[bar] test"} <-- v<> $foo[bar]
|
||||
{func var="test $foo.bar test"} <-- v<> $foo (not $foo.bar)
|
||||
{func var="test `$foo.bar` test"} <-- 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"} <-- ir<69> substituir $tpl_name com o valor
|
||||
{cycle values="one,two,`$smarty.config.myval`"} <-- 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
|
||||
|
@@ -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;
|
||||
|
@@ -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->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
|
||||
$smarty->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
|
||||
|
@@ -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;
|
||||
|
@@ -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 *}
|
||||
<h2>{$title|upper}</h2>
|
||||
<![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;
|
||||
|
@@ -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>
|
||||
|
@@ -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
|
||||
{}, {{}}, <!--{}-->, 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 {}, {{}}, <!--{}-->, 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>
|
||||
|
||||
|
@@ -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>
|
||||
|
Reference in New Issue
Block a user