mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-05 10:54:27 +02:00
split the pt_br dir
This commit is contained in:
29
docs/pt_BR/appendixes/bugs.xml
Normal file
29
docs/pt_BR/appendixes/bugs.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="bugs">
|
||||
<title>BUGS</title>
|
||||
<para>
|
||||
Verifique o arquivo de BUGS que v<>m com a <20>ltima distribui<75><69>o do Smarty, ou
|
||||
verifique o website.
|
||||
</para>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
31
docs/pt_BR/appendixes/resources.xml
Normal file
31
docs/pt_BR/appendixes/resources.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="resources">
|
||||
<title>Recursos</title>
|
||||
<para>
|
||||
A homepage do Smarty est<73> localizada em http://smarty.php.net/.
|
||||
Voc<6F> pode entrar na lista de email enviando um e-mail para
|
||||
smarty-general-subscribe@lists.php.net. Um arquivo da lista de e-mail pode ser
|
||||
visto em http://marc.theaimsgroup.com/?l=smarty&r=1&w=2
|
||||
</para>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
356
docs/pt_BR/appendixes/tips.xml
Normal file
356
docs/pt_BR/appendixes/tips.xml
Normal file
@@ -0,0 +1,356 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="tips">
|
||||
<title>Dicas & Truques</title>
|
||||
<para>
|
||||
</para>
|
||||
<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>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Imprimindo &nbsp; quando uma vari<72>vel est<73> vazia</title>
|
||||
<programlisting>
|
||||
|
||||
{* A forma mais longa *}
|
||||
|
||||
{if $title eq ""}
|
||||
&nbsp;
|
||||
{else}
|
||||
{$title}
|
||||
{/if}
|
||||
|
||||
|
||||
{* A forma mais simples *}
|
||||
|
||||
{$title|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>
|
||||
<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<75><69>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>.
|
||||
</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 *}
|
||||
{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>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="tips.passing.vars">
|
||||
<title>Passando a vari<72>vel titulo para o template de cabe<62>alho</title>
|
||||
<para>
|
||||
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
|
||||
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
|
||||
cabe<62>alho quando ele <20> inclu<6C>do.
|
||||
</para>
|
||||
<example>
|
||||
<title>Passando a vari<72>vel titulo para o template de cabe<62>alho</title>
|
||||
<programlisting>
|
||||
|
||||
mainpage.tpl
|
||||
------------
|
||||
|
||||
{include file="header.tpl" titulo="P<>gina Principal"}
|
||||
{* O corpo do template vem aqui *}
|
||||
{include file="footer.tpl"}
|
||||
|
||||
|
||||
archives.tpl
|
||||
------------
|
||||
|
||||
{config_load file="archive_page.conf"}
|
||||
{include file="header.tpl" titulo=#archivePageTitle#}
|
||||
{* O corpo do template vem aqui *}
|
||||
{include file="footer.tpl"}
|
||||
|
||||
|
||||
header.tpl
|
||||
----------
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>{$titulo|default:"BC News"}</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
|
||||
|
||||
footer.tpl
|
||||
----------
|
||||
</BODY>
|
||||
</HTML></programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Quando a p<>gina principal <20> atra<72>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<72>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>.
|
||||
</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<6D>m facilita a compara<72><61>o de datas se
|
||||
necess<73>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<65>vel por strtotime().
|
||||
</para>
|
||||
<example>
|
||||
<title>Usando date_format</title>
|
||||
<programlisting>
|
||||
{$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>
|
||||
<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.
|
||||
</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
|
||||
// startDate_Day, startDate_Month, startDate_Year
|
||||
|
||||
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
|
||||
|
||||
function makeTimeStamp($year="",$month="",$day="")
|
||||
{
|
||||
if(empty($year))
|
||||
$year = strftime("%Y");
|
||||
if(empty($month))
|
||||
$month = strftime("%m");
|
||||
if(empty($day))
|
||||
$day = strftime("%d");
|
||||
|
||||
return mktime(0,0,0,$month,$day,$year);
|
||||
}</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<61>, ent<6E>o n<>s faremos isso
|
||||
usando a tag de insert (lembre que tags de insert n<>o s<>o "cached!") Certifique-se que n<>o h<> sa<73>da
|
||||
para o navegador antes do template,
|
||||
sen<65>o o cabe<62>alho ir<69> falhar.
|
||||
</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() {
|
||||
// esta fun<75><6E>o espera o argumento $content
|
||||
extract(func_get_arg(0));
|
||||
if(empty($content))
|
||||
return;
|
||||
header($content);
|
||||
return;
|
||||
}
|
||||
|
||||
// seu template Smarty _deve_ come<6D>ar com a insert tag, olha o exemplo:
|
||||
|
||||
{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">
|
||||
|
||||
<!-- 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>
|
||||
Bem f<>cil isso, n<>o <20>?
|
||||
</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. ;-)
|
||||
</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.
|
||||
</para>
|
||||
<example>
|
||||
<title>Template componentizado</title>
|
||||
<programlisting>
|
||||
{* Smarty *}
|
||||
|
||||
{php}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
// 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);
|
||||
?>
|
||||
|
||||
|
||||
index.tpl
|
||||
---------
|
||||
|
||||
{* Smarty *}
|
||||
|
||||
{include_php file="load_ticker.php"}
|
||||
|
||||
Nome do Estoque: {$ticker_name} Pre<72>o do 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<65> e funcionar<61> corretamente no navegador. Isto <20> feito com
|
||||
o plugin mailto.
|
||||
</para>
|
||||
<example>
|
||||
<title>Exemplo de ofuscamento de um Endere<72>o de E-mail</title>
|
||||
<programlisting>
|
||||
|
||||
index.tpl
|
||||
---------
|
||||
|
||||
envia inquisi<73><69>o 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<>o <20> muito comum.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
73
docs/pt_BR/appendixes/troubleshooting.xml
Normal file
73
docs/pt_BR/appendixes/troubleshooting.xml
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="troubleshooting">
|
||||
<title>Localiza<EFBFBD><EFBFBD>o de Erros</title>
|
||||
<para></para>
|
||||
<sect1 id="smarty.php.errors">
|
||||
<title>erros de 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:
|
||||
</para>
|
||||
|
||||
<example>
|
||||
<title>Erros do Smarty</title>
|
||||
<programlisting>
|
||||
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
|
||||
in /path/to/smarty/Smarty.class.php on line 1041
|
||||
|
||||
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
|
||||
in /path/to/smarty/Smarty.class.php on line 1041</programlisting>
|
||||
</example>
|
||||
|
||||
<para>
|
||||
O Smarty te mostra o nome do template, o n<>mero da linha e o erro.
|
||||
Depois disso, o erro consiste do n<>mero da linha da classe Smarty em que o erro
|
||||
ocorreu.
|
||||
</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.
|
||||
</para>
|
||||
|
||||
<example>
|
||||
<title>Erros de an<61>lise do PHP</title>
|
||||
<programlisting>
|
||||
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75</programlisting>
|
||||
</example>
|
||||
|
||||
<para>
|
||||
Quando voc<6F> encontra um erro de an<61>lise de PHP, o n<>mero da linha do erro corresponder<65> ao
|
||||
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<6F> 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.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
58
docs/pt_BR/designers/chapter-debugging-console.xml
Normal file
58
docs/pt_BR/designers/chapter-debugging-console.xml
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<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<72><61>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<74><61>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<64>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<72>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>.
|
||||
</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<6C>dos 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.
|
||||
</para>
|
||||
</note>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
90
docs/pt_BR/designers/config-files.xml
Normal file
90
docs/pt_BR/designers/config-files.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<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<>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.
|
||||
</para>
|
||||
<example>
|
||||
<title>Examplo de sintaxe de um arquivo de configura<72><61>o</title>
|
||||
<programlisting>
|
||||
# global variables
|
||||
pageTitle = "Main Menu"
|
||||
bodyBgColor = #000000
|
||||
tableBgColor = #000000
|
||||
rowBgColor = #00ff00
|
||||
|
||||
[Customer]
|
||||
pageTitle = "Customer Info"
|
||||
|
||||
[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."""
|
||||
|
||||
# hidden section
|
||||
[.Database]
|
||||
host=my.domain.com
|
||||
db=ADDRESSBOOK
|
||||
user=php-user
|
||||
pass=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.
|
||||
</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<>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,
|
||||
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>.
|
||||
</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<> 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.
|
||||
</para>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
180
docs/pt_BR/designers/language-basic-syntax.xml
Normal file
180
docs/pt_BR/designers/language-basic-syntax.xml
Normal file
@@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="language.basic.syntax">
|
||||
<title>Sintaxe B<>sica</title>
|
||||
<para>
|
||||
Todas as tags de template do Smarty est<73>o fechadas com delimitadores.
|
||||
Por padr<64>o, estes delimitadores s<>o <literal>{</literal> e
|
||||
<literal>}</literal>, mas eles podem ser mudados.
|
||||
</para>
|
||||
<para>
|
||||
Para estes exemplos, n<>s iremos assumir que voc<6F> est<73> usando os
|
||||
delimitadores padr<64>o. No Smarty, todo o conte<74>do fora dos delimitadores <20>
|
||||
mostrado como conte<74>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>
|
||||
|
||||
<sect1 id="language.syntax.comments">
|
||||
<title>Coment<EFBFBD>rios</title>
|
||||
<para>
|
||||
Coment<6E>rios de template s<>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.
|
||||
</para>
|
||||
<example>
|
||||
<title>Coment<EFBFBD>rios</title>
|
||||
<programlisting>
|
||||
{* Smarty *}
|
||||
|
||||
{* inclui o arquivo header aqui *}
|
||||
{include file="header.tpl"}
|
||||
|
||||
{include file=$includeFile}
|
||||
|
||||
{include file=#includeFile#}
|
||||
|
||||
{* Mostra listas dropdown *}
|
||||
<SELECT name=company>
|
||||
{html_options values=$vals selected=$selected output=$output}
|
||||
</SELECT></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="language.syntax.functions">
|
||||
<title>Fun<EFBFBD><EFBFBD>es</title>
|
||||
<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"}.
|
||||
</para>
|
||||
<example>
|
||||
<title>Sintaxe de fun<75><6E>es</title>
|
||||
<programlisting>
|
||||
{config_load file="colors.conf"}
|
||||
|
||||
{include file="header.tpl"}
|
||||
|
||||
{if $highlight_name}
|
||||
Welcome, <font color="{#fontColor#}">{$name}!</font>
|
||||
{else}
|
||||
Welcome, {$name}!
|
||||
{/if}
|
||||
|
||||
{include file="footer.tpl"}</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Ambas as fun<75><6E>es internas e as fun<75><6E>es customizadas 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
|
||||
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.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<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<>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.
|
||||
</para>
|
||||
<para>
|
||||
Alguns atributos requerem valores booleanos (true ou false). Estes 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>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Sintaxe de atributos de fun<75><6E>es</title>
|
||||
<programlisting>
|
||||
{include file="header.tpl"}
|
||||
|
||||
{include file=$includeFile}
|
||||
|
||||
{include file=#includeFile#}
|
||||
|
||||
{html_select_date display_days=yes}
|
||||
|
||||
<SELECT name=company>
|
||||
{html_options values=$vals selected=$selected output=$output}
|
||||
</SELECT></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<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.
|
||||
</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
|
||||
|
||||
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>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="language.math">
|
||||
<title>Matem<EFBFBD>tica</title>
|
||||
<para>
|
||||
Matem<65>tica pode ser aplicada diretamente em valores de vari<72>veis.
|
||||
</para>
|
||||
<example>
|
||||
<title>Exemplos de matem<65>tica</title>
|
||||
<programlisting>
|
||||
{$foo+1}
|
||||
|
||||
{$foo*$bar}
|
||||
|
||||
{* alguns exemplos mais complicados *}
|
||||
|
||||
{$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>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
1475
docs/pt_BR/designers/language-builtin-functions.xml
Normal file
1475
docs/pt_BR/designers/language-builtin-functions.xml
Normal file
File diff suppressed because it is too large
Load Diff
56
docs/pt_BR/designers/language-combining-modifiers.xml
Normal file
56
docs/pt_BR/designers/language-combining-modifiers.xml
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<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).
|
||||
</para>
|
||||
<example>
|
||||
<title>Combinando Modificadores</title>
|
||||
<programlisting>
|
||||
index.php:
|
||||
|
||||
$smarty = new Smarty;
|
||||
$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
index.tpl:
|
||||
|
||||
{$articleTitle}
|
||||
{$articleTitle|upper|spacify}
|
||||
{$articleTitle|lower|spacify|truncate}
|
||||
{$articleTitle|lower|truncate:30|spacify}
|
||||
{$articleTitle|lower|spacify|truncate:30:". . ."}
|
||||
|
||||
|
||||
MOSTRA:
|
||||
|
||||
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>
|
||||
</example>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
2646
docs/pt_BR/designers/language-custom-functions.xml
Normal file
2646
docs/pt_BR/designers/language-custom-functions.xml
Normal file
File diff suppressed because it is too large
Load Diff
1199
docs/pt_BR/designers/language-modifiers.xml
Normal file
1199
docs/pt_BR/designers/language-modifiers.xml
Normal file
File diff suppressed because it is too large
Load Diff
342
docs/pt_BR/designers/language-variables.xml
Normal file
342
docs/pt_BR/designers/language-variables.xml
Normal file
@@ -0,0 +1,342 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<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).
|
||||
</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:
|
||||
<programlisting>
|
||||
{$Name}
|
||||
|
||||
{$Contacts[row].Phone}
|
||||
|
||||
<body bgcolor="{#bgcolor#}"></programlisting>
|
||||
</para>
|
||||
|
||||
<sect1 id="language.assigned.variables">
|
||||
<title>Vari<EFBFBD>veis definidas do PHP</title>
|
||||
<para>
|
||||
Vari<72>veis que s<>o definidas do PHP s<>o referenciadas precedendo elas
|
||||
com um sinal de sifr<66>o <literal>$</literal>. Vari<72>veis definidas dentro do template
|
||||
com a fun<75><6E>o <link linkend="language.function.assign">assign</link>
|
||||
tamb<6D>m s<>o mostradas desta maneira.
|
||||
</para>
|
||||
<example>
|
||||
|
||||
<title>Vari<EFBFBD>veis definidas</title>
|
||||
<programlisting>
|
||||
Hello {$firstname}, glad to see you could make it.
|
||||
<p>
|
||||
Your last login was on {$lastLoginDate}.
|
||||
|
||||
MOSTRA:
|
||||
|
||||
Hello Doug, glad to see you could make it.
|
||||
<p>
|
||||
Your last login was on January 11th, 2001.</programlisting>
|
||||
</example>
|
||||
|
||||
<sect2 id="language.variables.assoc.arrays">
|
||||
<title>Associative arrays</title>
|
||||
<para>
|
||||
Voc<6F> tamb<6D>m pode referenciar matrizes associativas que s<>o definidas no PHP
|
||||
especificando a chave depois do s<>mbolo '.'
|
||||
(ponto).
|
||||
</para>
|
||||
<example>
|
||||
<title>Acessando vari<72>veis de matriz associativa</title>
|
||||
<programlisting>
|
||||
index.php:
|
||||
|
||||
$smarty = new Smarty;
|
||||
$smarty->assign('Contacts',
|
||||
array('fax' => '555-222-9876',
|
||||
'email' => 'zaphod@slartibartfast.com',
|
||||
'phone' => array('home' => '555-444-3333',
|
||||
'cell' => '555-111-1234')));
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
index.tpl:
|
||||
|
||||
{$Contacts.fax}<br>
|
||||
{$Contacts.email}<br>
|
||||
{* you can print arrays of arrays as well *}
|
||||
{$Contacts.phone.home}<br>
|
||||
{$Contacts.phone.cell}<br>
|
||||
|
||||
MOSTRA:
|
||||
|
||||
555-222-9876<br>
|
||||
zaphod@slartibartfast.com<br>
|
||||
555-444-3333<br>
|
||||
555-111-1234<br></programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
<sect2 id="language.variables.array.indexes">
|
||||
<title><EFBFBD>ndices de Matrizes</title>
|
||||
<para>
|
||||
Voc<6F> pode referencia matrizes pelo seu <20>ndice, muito
|
||||
parecido com a sintaxe nativa do PHP.
|
||||
</para>
|
||||
<example>
|
||||
<title>Acesando matrizes por seus <20>ndices</title>
|
||||
<programlisting>
|
||||
index.php:
|
||||
|
||||
$smarty = new Smarty;
|
||||
$smarty->assign('Contacts',
|
||||
array('555-222-9876',
|
||||
'zaphod@slartibartfast.com',
|
||||
array('555-444-3333',
|
||||
'555-111-1234')));
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
index.tpl:
|
||||
|
||||
{$Contacts[0]}<br>
|
||||
{$Contacts[1]}<br>
|
||||
{* you can print arrays of arrays as well *}
|
||||
{$Contacts[2][0]}<br>
|
||||
{$Contacts[2][1]}<br>
|
||||
|
||||
MOSTRA:
|
||||
|
||||
555-222-9876<br>
|
||||
zaphod@slartibartfast.com<br>
|
||||
555-444-3333<br>
|
||||
555-111-1234<br></programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
<sect2 id="language.variables.objects">
|
||||
<title>Objetos</title>
|
||||
<para>
|
||||
Propriedades de objetos definidos do PHP podem ser referenciados
|
||||
especificando-se o nome da propriedade depois do s<>mbolo '->'.
|
||||
</para>
|
||||
<example>
|
||||
<title>Acessando propriedades de objetos</title>
|
||||
<programlisting>
|
||||
name: {$person->name}<br>
|
||||
email: {$person->email}<br>
|
||||
|
||||
MOSTRA:
|
||||
|
||||
name: Zaphod Beeblebrox<br>
|
||||
email: zaphod@slartibartfast.com<br></programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="language.config.variables">
|
||||
<title>Vari<EFBFBD>veis carregadas de arquivos de configura<72><61>o</title>
|
||||
<para>
|
||||
Vari<72>veis que s<>o carregadas de arquivos de configura<72><61>o s<>o referenciadas
|
||||
colocando-se elas entre cancelas (#), ou com a vari<72>vel smarty
|
||||
<link
|
||||
linkend="language.variables.smarty.config">$smarty.config</link>.
|
||||
A segunda sintaxe <20> <20>til para coloca-las
|
||||
entre aspas em um atributo.
|
||||
</para>
|
||||
<example>
|
||||
|
||||
<title>Vari<EFBFBD>veis de configura<72><61>o</title>
|
||||
<programlisting>
|
||||
foo.conf:
|
||||
|
||||
pageTitle = "This is mine"
|
||||
bodyBgColor = "#eeeeee"
|
||||
tableBorderSize = "3"
|
||||
tableBgColor = "#bbbbbb"
|
||||
rowBgColor = "#cccccc"
|
||||
|
||||
index.tpl:
|
||||
|
||||
{config_load file="foo.conf"}
|
||||
<html>
|
||||
<title>{#pageTitle#}</title>
|
||||
<body bgcolor="{#bodyBgColor#}">
|
||||
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
|
||||
<tr bgcolor="{#rowBgColor#}">
|
||||
<td>First</td>
|
||||
<td>Last</td>
|
||||
<td>Address</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
index.tpl: (sintaxe alternativa)
|
||||
|
||||
{config_load file="foo.conf"}
|
||||
<html>
|
||||
<title>{$smarty.config.pageTitle}</title>
|
||||
<body bgcolor="{$smarty.config.bodyBgColor}">
|
||||
<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
|
||||
<tr bgcolor="{$smarty.config.rowBgColor}">
|
||||
<td>First</td>
|
||||
<td>Last</td>
|
||||
<td>Address</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
SA<EFBFBD>DA: (mesma para ambos exemplos)
|
||||
|
||||
<html>
|
||||
<title>This is mine</title>
|
||||
<body bgcolor="#eeeeee">
|
||||
<table border="3" bgcolor="#bbbbbb">
|
||||
<tr bgcolor="#cccccc">
|
||||
<td>First</td>
|
||||
<td>Last</td>
|
||||
<td>Address</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html></programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Vari<72>veis de um arquivo de configura<72><61>o n<>o podem ser usadas at<61>
|
||||
que sejam carregadas de um arquivo de configura<72><61>o. Este procedimento
|
||||
<20> explicado posteriormente neste documento em
|
||||
<command>config_load</command>.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="language.variables.smarty">
|
||||
<title>A vari<72>vel reservada {$smarty}</title>
|
||||
<para>
|
||||
A vari<72>vel reservada {$smarty} pode ser utilizada para acessar vari<72>veis
|
||||
especiais do template. Segue uma lista completa.
|
||||
</para>
|
||||
|
||||
<sect2 id="language.variables.smarty.request">
|
||||
<title>Vari<EFBFBD>veis Request</title>
|
||||
<para>
|
||||
Vari<72>veis request como get, post, cookies, server,
|
||||
environment, e session podem ser acessadas como mostrado
|
||||
nos exemplos abaixo:
|
||||
</para>
|
||||
<example>
|
||||
|
||||
<title>Mostrando v<>ri<72>veis request</title>
|
||||
<programlisting>
|
||||
{* mostra o valor de page da URL (GET) http://www.domain.com/index.php?page=foo *}
|
||||
{$smarty.get.page}
|
||||
|
||||
{* mostra a vari<72>vel "page" de um formul<75>rio (POST) *}
|
||||
{$smarty.post.page}
|
||||
|
||||
{* mostra o valor do cookie "username" *}
|
||||
{$smarty.cookies.username}
|
||||
|
||||
{* mostra a vari<72>vel do servidor "SERVER_NAME" *}
|
||||
{$smarty.server.SERVER_NAME}
|
||||
|
||||
{* mostra a vari<72>vel de ambiente do sistema "PATH" *}
|
||||
{$smarty.env.PATH}
|
||||
|
||||
{* mostra a vari<72>vel de session do php "id" *}
|
||||
{$smarty.session.id}
|
||||
|
||||
{* mostra a vari<72>vel "username" da uni<6E>o de get/post/cookies/server/env *}
|
||||
{$smarty.request.username}</programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="language.variables.smarty.now">
|
||||
<title>{$smarty.now}</title>
|
||||
<para>
|
||||
O timestamp atual pode ser acessado com {$smarty.now}.
|
||||
O n<>mero reflete o n<>mero de segundos passados desde o assim chamado
|
||||
Epoch (1 de Janeiro de 1970) e pode ser passado diretamente para o
|
||||
modificador date_format para mostrar a data.
|
||||
</para>
|
||||
<example>
|
||||
|
||||
<title>Usando {$smarty.now}</title>
|
||||
<programlisting>
|
||||
{* usa o modificador date_format para mostrar a data e hora atuais *}
|
||||
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}</programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
<sect2 id="language.variables.smarty.const">
|
||||
<title>{$smarty.const}</title>
|
||||
<para>
|
||||
Voc<6F> pode acessar o valor de constantes PHP diretamente.
|
||||
</para>
|
||||
<example>
|
||||
|
||||
<title>Usando {$smarty.const}</title>
|
||||
<programlisting>
|
||||
{$smarty.const._MY_CONST_VAL}</programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="language.variables.smarty.capture">
|
||||
<title>{$smarty.capture}</title>
|
||||
<para>
|
||||
A sa<73>da capturada via {capture}..{/capture} pode ser acessada usando a vari<72>vel
|
||||
{$smarty}. Veja a a se<73><65>o sobre
|
||||
<link linkend="language.function.capture">capture</link> para um exemplo.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="language.variables.smarty.config">
|
||||
<title>{$smarty.config}</title>
|
||||
<para>
|
||||
A vari<72>vel {$smarty} pode ser usada para referir vari<72>veis de configura<72><61>o carregadas.
|
||||
{$smarty.config.foo} <20> um sinonimo para {#foo#}. Veja a se<73><65>o sobre
|
||||
<link linkend="language.function.config.load">config_load</link> para um exemplo.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="language.variables.smarty.loops">
|
||||
<title>{$smarty.section}, {$smarty.foreach}</title>
|
||||
<para>
|
||||
A vari<72>vel {$smarty} pode ser usada para se referir a propriedades 'section' e
|
||||
'foreach' de loop. Veja a documenta<74><61>o sobre
|
||||
<link linkend="language.function.section">section</link> e
|
||||
<link linkend="language.function.foreach">foreach</link>.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="language.variables.smarty.template">
|
||||
<title>{$smarty.template}</title>
|
||||
<para>
|
||||
Esta vari<72>vel cont<6E>m o nome do template
|
||||
atual que esta sendo processado.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
546
docs/pt_BR/programmers/advanced-features.xml
Normal file
546
docs/pt_BR/programmers/advanced-features.xml
Normal file
@@ -0,0 +1,546 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="advanced.features">
|
||||
<title>Advanced Features</title>
|
||||
<sect1 id="advanced.features.objects">
|
||||
<title>Objetos</title>
|
||||
<para>
|
||||
O Smarty permite acesso a objetos do PHP atrav<61>s de seus templates. H<> duas formas de acess<73>-los.
|
||||
Uma forma <20> registrar objetos para o template, ent<6E>o os acessa via sintaxe similar a fun<75><6E>es
|
||||
customiz<69>veis. A outra forma <20> atribuir objetos para os templates e acess<73>-los como se fossem
|
||||
uma vari<72>vel atribu<62>da. O primeiro m<>todo tem uma sintaxe de template muito mais legal. E tamb<6D>m
|
||||
mais segura, <20> medida que um objeto registrado pode ser restrito a certos m<>todos e
|
||||
propriedades. Entretanto, um objeto registrado n<>o pode ser
|
||||
posto em loop ou ser atribuido em arrays de
|
||||
objetos, etc. O m<>todo que voc<6F> escolher ser<65> determinado pelas suas necessidades, mas use o
|
||||
primeiro m<>todo se poss<73>vel para
|
||||
manter um m<>nimo de sintaxe no template.
|
||||
</para>
|
||||
<para>
|
||||
Se a seguran<61>a est<73> habilitada, nenhum dos m<>todos privados ou fun<75><6E>es podem acessados
|
||||
(come<6D>ando com "_"). Se um m<>todo e propriedade de um mesmo nome existir, o m<>todo ser<65>
|
||||
usado.
|
||||
</para>
|
||||
<para>
|
||||
Voc<6F> pode restringir os m<>todos e propriedades que podem ser acessados listando os em um array
|
||||
como o terceiro par<61>metro de registra<72><61>o.
|
||||
</para>
|
||||
<para>
|
||||
Por defini<6E><69>o, par<61>metros passados para objetos atrav<61>s dos templates s<>o passados da mesma
|
||||
forma que fun<75><6E>es customiz<69>veis os obt<62>m. Um array associativo <20> passado como o primeiro par<61>metro,
|
||||
e o objeto smarty como o segundo. Se voc<6F> quer que os par<61>metros passados um de cada vez
|
||||
por cada argumento como passagem de par<61>metro de objeto tradicional, defina o quarto par<61>metro
|
||||
de registra<72><61>o para falso.
|
||||
</para>
|
||||
<para>
|
||||
O quinto par<61>metro opcional s<> tem efeito com <parameter>format</parameter>
|
||||
sendo <literal>true</literal> e cont<6E>m
|
||||
uma lista de m<>tods de ob que seriam tratados como
|
||||
blocos. Isso significa que estes m<>todos
|
||||
tem uma tag de fechamento no template
|
||||
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>) e
|
||||
os par<61>metros para os m<>todos tem a mesma sinopse como os par<61>metros para
|
||||
block-function-plugins: Eles pegam 4 par<61>metros
|
||||
<parameter>$params</parameter>,
|
||||
<parameter>$content</parameter>,
|
||||
<parameter>&$smarty</parameter> e
|
||||
<parameter>&$repeat</parameter> e eles tamb<6D>m comportam-se como
|
||||
block-function-plugins.
|
||||
</para>
|
||||
<example>
|
||||
<title>usando um objeto registrado ou atribu<62>do</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
// O objeto
|
||||
|
||||
class My_Object {
|
||||
function meth1($params, &$smarty_obj) {
|
||||
return "this is my meth1";
|
||||
}
|
||||
}
|
||||
|
||||
$myobj = new My_Object;
|
||||
// registrando o objeto (ser<65> por refer<65>ncia)
|
||||
$smarty->register_object("foobar",$myobj);
|
||||
// Se voc<6F> quer restringie acesso a certos m<>todos ou propriedades, liste-os
|
||||
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
|
||||
// Se voc<6F> quer usar o formato de par<61>metro de objeto tradicional, passe um booleano de false
|
||||
$smarty->register_object("foobar",$myobj,null,false);
|
||||
|
||||
// Voc<6F> pode tamb<6D>m atribuir objetos. Atribua por refer<65>ncia quando poss<73>vel.
|
||||
$smarty->assign_by_ref("myobj", $myobj);
|
||||
|
||||
$smarty->display("index.tpl");
|
||||
?>
|
||||
|
||||
TEMPLATE:
|
||||
|
||||
{* accessa nosso objeto registrado *}
|
||||
{foobar->meth1 p1="foo" p2=$bar}
|
||||
|
||||
{* voc<6F> pode tamb<6D>m atribuir a sa<73>da *}
|
||||
{foobar->meth1 p1="foo" p2=$bar assign="output"}
|
||||
the output was {$output}
|
||||
|
||||
{* acessa nosso objeto atribu<62>do *}
|
||||
{$myobj->meth1("foo",$bar)}</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="advanced.features.prefilters">
|
||||
<title>Prefilters</title>
|
||||
<para>
|
||||
Os prefilters de Template s<>o fun<75><6E>es de PHP nas quais seus templates s<>o rodados
|
||||
antes de serem compilados. Isto <20> bom para preprocessamento de seus templates para remover
|
||||
coment<6E>rios indesejados, mantendo o olho no que as pessoas est<73>o colocando nos seus templates,
|
||||
etc. Prefilters podem ser ou <link linkend="api.register.prefilter">registrado</link>
|
||||
ou carregado do diret<65>rio de plugins usando a fun<75><6E>o
|
||||
<link linkend="api.load.filter">load_filter()</link>
|
||||
ou pela configura<72><61>o da vari<72>vel
|
||||
<link linkend="variable.autoload.filters">$autoload_filters</link>.
|
||||
O Smarty passar<61> o c<>digo fonte do template como o
|
||||
primeiro argumeto, e espera a fun<75><6E>o retornar
|
||||
o c<>digo fonte do template resultante.
|
||||
</para>
|
||||
<example>
|
||||
<title>Usando um prefilter de template</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
// Ponha isto em sua aplica<63><61>o
|
||||
function remove_dw_comments($tpl_source, &$smarty)
|
||||
{
|
||||
return preg_replace("/<!--#.*-->/U","",$tpl_source);
|
||||
}
|
||||
|
||||
// registrar o prefilter
|
||||
$smarty->register_prefilter("remove_dw_comments");
|
||||
$smarty->display("index.tpl");
|
||||
?>
|
||||
|
||||
{* Smarty template index.tpl *}
|
||||
<!--# esta linha ser<65> removida pelo prefilter --></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="advanced.features.postfilters">
|
||||
<title>Postfilters</title>
|
||||
<para>
|
||||
Os postfilters de template s<>o fun<75><6E>es de PHP nas quais seus templates s<>o rodados
|
||||
imediatamente depois de serem compilados. Os postfilters podem ser ou
|
||||
<link linkend="api.register.postfilter">registrado</link>carrgados do diret<65>rio de
|
||||
plugins usando a fun<75><6E>o
|
||||
<link linkend="api.load.filter">load_filter()</link> ou pela
|
||||
vari<72>vel de configura<72><61>o
|
||||
<link linkend="variable.autoload.filters">$autoload_filters</link>.
|
||||
O Smarty passar<61> o c<>digo fonte do template compilado
|
||||
como o primeiro argumento, e espera
|
||||
a fun<75><6E>o retornar o resultado do processamento.
|
||||
</para>
|
||||
<example>
|
||||
<title>usando um postfilter de template</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
// ponha isto em sua aplica<63><61>o
|
||||
function add_header_comment($tpl_source, &$smarty)
|
||||
{
|
||||
return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source;
|
||||
}
|
||||
|
||||
// registra o postfilter
|
||||
$smarty->register_postfilter("add_header_comment");
|
||||
$smarty->display("index.tpl");
|
||||
?>
|
||||
|
||||
{* compiled Smarty template index.tpl *}
|
||||
<!-- Created by Smarty! -->
|
||||
{* rest of template content... *}</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="advanced.features.outputfilters">
|
||||
<title>Output Filters (Filtros de Sa<53>da)</title>
|
||||
<para>
|
||||
Quando o template <20> invocado via display() ou fetch(), sua sa<73>da pode ser enviada
|
||||
atrav<61>s de um ou mais filtros de sa<73>da. Estes diferem dos postfilters porque postfilters
|
||||
operam em templates compilados antes de serem salvos para o disco, e os filtros de sa<73>da
|
||||
operam na sa<73>da do template quando
|
||||
ele <20> executado.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Filtros de Sa<53>da podem ser ou
|
||||
<link linkend="api.register.outputfilter">registrado</link> ou carregado
|
||||
do diret<65>rio de plugins usando a fun<75><6E>o
|
||||
<link linkend="api.load.filter">load_filter()</link> ou configurando a vari<72>vel
|
||||
<link linkend="variable.autoload.filters">$autoload_filters</link>.
|
||||
O Smarty passar<61> a sa<73>da como o primeiro argumento,
|
||||
e espera a fun<75><6E>o retornar o resultado
|
||||
do processamento.
|
||||
</para>
|
||||
<example>
|
||||
<title>usando um filtro de sa<73>da de template</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
// ponha isto em sua aplica<63><61>o
|
||||
function protect_email($tpl_output, &$smarty)
|
||||
{
|
||||
$tpl_output =
|
||||
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
|
||||
'$1%40$2', $tpl_output);
|
||||
return $tpl_output;
|
||||
}
|
||||
|
||||
// registra o outputfilter
|
||||
$smarty->register_outputfilter("protect_email");
|
||||
$smarty->display("index.tpl");
|
||||
|
||||
// agora qualquer ocorr<72>ncia de um endere<72>o de email na sa<73>da do template ter<65> uma
|
||||
// simples prote<74><65>o contra spambots
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="section.template.cache.handler.func">
|
||||
<title>Fun<EFBFBD><EFBFBD>o Manipuladora de Cache</title>
|
||||
<para>
|
||||
Como uma alternativa ao uso do mecanismo de caching padr<64>o baseado em arquivo, voc<6F> pode
|
||||
especificar uma fun<75><6E>o de manipula<6C><61>o de cache customizada que ser<65> usada para ler, escrever
|
||||
e limpar arquivos de cache.
|
||||
</para>
|
||||
<para>
|
||||
Crie uma fun<75><6E>o em sua aplica<63><61>o que o Smarty usar<61> como um manipulador de cache. Defina o
|
||||
nome dela na vari<72>vel de classe
|
||||
<link linkend="variable.cache.handler.func">$cache_handler_func</link>.
|
||||
O Smarty agora usar<61> esta para manipular dados no cache. O primeiro argumento <20> a a<><61>o,
|
||||
que <20> um desses 'read', 'write' e 'clear'. O segundo par<61>metro <20> o objeto do Smarty. O
|
||||
terceiro par<61>metro <20> o conte<74>do que est<73> no cache.
|
||||
No write, o Smarty passa o conte<74>do em
|
||||
cache nestes par<61>metros. No 'read', o Smarty espera sua fun<75><6E>o aceitar este par<61>metro por
|
||||
refer<65>ncia e preenche ele com os dados em cache. No 'clear', passa uma vari<72>vel simulacra aqui
|
||||
visto que ela n<>o <20> usada. O quarto par<61>metro
|
||||
<20> o nome do arquivo de template (necess<73>rio para
|
||||
ler/escrever), o quinto par<61>metro <20> a cache_id (opcional),
|
||||
e o sexto <20> a compile_id (opcional).
|
||||
</para>
|
||||
<para>
|
||||
Note que: O <20>ltimo par<61>metro ($exp_time)foi adicionado no Smarty-2.6.0.
|
||||
</para>
|
||||
<example>
|
||||
<title>exemplo usando MySQL como uma fonte de cache</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
|
||||
exemplo de uso:
|
||||
|
||||
include('Smarty.class.php');
|
||||
include('mysql_cache_handler.php');
|
||||
|
||||
$smarty = new Smarty;
|
||||
$smarty->cache_handler_func = 'mysql_cache_handler';
|
||||
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
|
||||
mysql database is expected in this format:
|
||||
|
||||
create database SMARTY_CACHE;
|
||||
|
||||
create table CACHE_PAGES(
|
||||
CacheID char(32) PRIMARY KEY,
|
||||
CacheContents MEDIUMTEXT NOT NULL
|
||||
);
|
||||
|
||||
*/
|
||||
|
||||
function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null)
|
||||
{
|
||||
// set db host, user and pass here
|
||||
$db_host = 'localhost';
|
||||
$db_user = 'myuser';
|
||||
$db_pass = 'mypass';
|
||||
$db_name = 'SMARTY_CACHE';
|
||||
$use_gzip = false;
|
||||
|
||||
// cria um cache id unico
|
||||
$CacheID = md5($tpl_file.$cache_id.$compile_id);
|
||||
|
||||
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
|
||||
$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database");
|
||||
return false;
|
||||
}
|
||||
mysql_select_db($db_name);
|
||||
|
||||
switch ($action) {
|
||||
case 'read':
|
||||
// save cache to database
|
||||
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
|
||||
if(!$results) {
|
||||
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
||||
}
|
||||
$row = mysql_fetch_array($results,MYSQL_ASSOC);
|
||||
|
||||
if($use_gzip && function_exists("gzuncompress")) {
|
||||
$cache_contents = gzuncompress($row["CacheContents"]);
|
||||
} else {
|
||||
$cache_contents = $row["CacheContents"];
|
||||
}
|
||||
$return = $results;
|
||||
break;
|
||||
case 'write':
|
||||
// save cache to database
|
||||
|
||||
if($use_gzip && function_exists("gzcompress")) {
|
||||
// compress the contents for storage efficiency
|
||||
$contents = gzcompress($cache_content);
|
||||
} else {
|
||||
$contents = $cache_content;
|
||||
}
|
||||
$results = mysql_query("replace into CACHE_PAGES values(
|
||||
'$CacheID',
|
||||
'".addslashes($contents)."')
|
||||
");
|
||||
if(!$results) {
|
||||
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
||||
}
|
||||
$return = $results;
|
||||
break;
|
||||
case 'clear':
|
||||
// clear cache info
|
||||
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
|
||||
// clear them all
|
||||
$results = mysql_query("delete from CACHE_PAGES");
|
||||
} else {
|
||||
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
|
||||
}
|
||||
if(!$results) {
|
||||
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
|
||||
}
|
||||
$return = $results;
|
||||
break;
|
||||
default:
|
||||
// error, unknown action
|
||||
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
|
||||
$return = false;
|
||||
break;
|
||||
}
|
||||
mysql_close($link);
|
||||
return $return;
|
||||
|
||||
}
|
||||
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="template.resources">
|
||||
<title>Recursos (Resources)</title>
|
||||
<para>
|
||||
Os templates podem vir de uma variedade de fontes. Quando voc<6F> exibe (display) ou
|
||||
busca (fetch) um template, ou inclui um template de dentro de outro template, voc<6F>
|
||||
fornece um tipo de recurso, seguido pelo
|
||||
caminho e nome do template apropriado. Se um
|
||||
recurso n<>o <20> dado explicitamente o valor de
|
||||
<link linkend="variable.default.resource.type">$default_resource_type</link> <20> assumido.
|
||||
</para>
|
||||
<sect2 id="templates.from.template.dir">
|
||||
<title>Templates partindo do $template_dir</title>
|
||||
<para>
|
||||
Templates a partir do $template_dir n<>o exigem um recurso de template,
|
||||
apesar de voc<6F> usar o arquivo: resource for consistancy.
|
||||
Apenas forne<6E>a o caminho para o template que voc<6F> quer usar em rela<6C><61>o ao diret<65>rio
|
||||
root $template_dir.
|
||||
</para>
|
||||
<example>
|
||||
<title>Usando templates partindo do $template_dir</title>
|
||||
<programlisting>
|
||||
// from PHP script
|
||||
$smarty->display("index.tpl");
|
||||
$smarty->display("admin/menu.tpl");
|
||||
$smarty->display("file:admin/menu.tpl"); // Igual ao de cima
|
||||
|
||||
{* de dentro do template do Smarty *}
|
||||
{include file="index.tpl"}
|
||||
{include file="file:index.tpl"} {* igual ao de cima *}</programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
<sect2 id="templates.from.any.dir">
|
||||
<title>Templates partindo de qualquer diret<65>rio</title>
|
||||
<para>
|
||||
Os Templates de fora do $template_dir exigem o arquivo:
|
||||
tipo de recurso do template,
|
||||
seguido pelo caminho absoluto e nome do template.
|
||||
</para>
|
||||
<example>
|
||||
<title>usando templates partindo de qualquer diret<65>rio</title>
|
||||
<programlisting>
|
||||
// de dentro do script PHP
|
||||
$smarty->display("file:/export/templates/index.tpl");
|
||||
$smarty->display("file:/path/to/my/templates/menu.tpl");
|
||||
|
||||
{* de dentro do template do Smarty *}
|
||||
{include file="file:/usr/local/share/templates/navigation.tpl"}</programlisting>
|
||||
</example>
|
||||
|
||||
<sect3>
|
||||
<title>Caminhos de arquivos do Windows</title>
|
||||
<para>
|
||||
Se voc<6F> est<73> usando uma m<>quina windows, caminhos de arquivos normalmente incluem uma letra
|
||||
do drive (C:) no come<6D>o do nome do caminho.
|
||||
Esteja certo de usar "file:" no caminho para
|
||||
evitar conflitos de nome e obter os resultados desejados.
|
||||
</para>
|
||||
<example>
|
||||
<title>usando templates com caminhos de arquivo do windows</title>
|
||||
<programlisting>
|
||||
// de dentro do script PHP
|
||||
$smarty->display("file:C:/export/templates/index.tpl");
|
||||
$smarty->display("file:F:/path/to/my/templates/menu.tpl");
|
||||
|
||||
{* de dentro do template do Smarty *}
|
||||
{include file="file:D:/usr/local/share/templates/navigation.tpl"}</programlisting>
|
||||
</example>
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="templates.from.elsewhere">
|
||||
<title>Templates partindo de outras fontes</title>
|
||||
<para>
|
||||
Voc<6F> pode resgatar templates usando qualquer fonte poss<73>vel de voc<6F> acessar com PHP: banco
|
||||
de dados, sockets, LDAP, e assim por diante.
|
||||
Voc<6F> faz isto escrevendo as fun<75><6E>es de plugin
|
||||
de recurso e registrando elas com o Smarty.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Veja a se<73><65>o <link linkend="plugins.resources">plugins de recurso</link>
|
||||
para mais informa<6D><61>o sobre as fun<75><6E>es
|
||||
que voc<6F> deve fornecer.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
Note que voc<6F> pode ativar manualmente o recurso de <literal>arquivo</literal> embutido, mas n<>o pode fornecer um recurso que busca templates a partir do sistema de arquivos de alguma outra forma registrando sob um outro nome de recurso.
|
||||
<literal>file</literal> resource, but you can provide a resource
|
||||
that fetches templates from the file system in some other way by
|
||||
registering under another resource name.
|
||||
</para>
|
||||
</note>
|
||||
<example>
|
||||
<title>usando recursos customiz<69>veis</title>
|
||||
<programlisting>
|
||||
// no script PHP
|
||||
|
||||
// ponha estas fun<75><6E>es em algum lugar de sua aplica<63><61>o
|
||||
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
|
||||
{
|
||||
// fa<66>a o banco de dados chamar aqui para buscar o seu template,
|
||||
// preenchendo o $tpl_source
|
||||
$sql = new SQL;
|
||||
$sql->query("select tpl_source
|
||||
from my_table
|
||||
where tpl_name='$tpl_name'");
|
||||
if ($sql->num_rows) {
|
||||
$tpl_source = $sql->record['tpl_source'];
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
|
||||
{
|
||||
// fa<66>a o banco de dados chamar daqui para preencher a $tpl_timestamp.
|
||||
$sql = new SQL;
|
||||
$sql->query("select tpl_timestamp
|
||||
from my_table
|
||||
where tpl_name='$tpl_name'");
|
||||
if ($sql->num_rows) {
|
||||
$tpl_timestamp = $sql->record['tpl_timestamp'];
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function db_get_secure($tpl_name, &$smarty_obj)
|
||||
{
|
||||
// assume-se que todos os templates s<>o seguros
|
||||
return true;
|
||||
}
|
||||
|
||||
function db_get_trusted($tpl_name, &$smarty_obj)
|
||||
{
|
||||
// n<>o usado para templates
|
||||
}
|
||||
|
||||
// registrar o nome de recurso "db"
|
||||
$smarty->register_resource("db", array("db_get_template",
|
||||
"db_get_timestamp",
|
||||
"db_get_secure",
|
||||
"db_get_trusted"));
|
||||
|
||||
// usando o recurso a partir do script PHP
|
||||
$smarty->display("db:index.tpl");
|
||||
|
||||
{* usando o recurso de dentro do template do Smarty *}
|
||||
{include file="db:/extras/navigation.tpl"}</programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="default.template.handler.function">
|
||||
<title>Fun<EFBFBD><EFBFBD>o Manipuladora de Template Padr<64>o</title>
|
||||
<para>
|
||||
Voc<6F> pode especificar a fun<75><6E>o que <20> usada para devolver o conte<74>do do template no evento
|
||||
em que o template n<>o pode ser devolvido de seu recurso. Um uso disto <20> para criar templates
|
||||
que n<>o existem "on-the-fly"
|
||||
(templates cujo conte<74>do flutua muito, bastante vari<72>vel).
|
||||
</para>
|
||||
<example>
|
||||
<title>usando a fun<75><6E>o manipuladora de template padr<64>o</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
// ponha esta fun<75><6E>o em algum lugar de sua aplica<63><61>o
|
||||
|
||||
function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj)
|
||||
{
|
||||
if( $resource_type == 'file' ) {
|
||||
if ( ! is_readable ( $resource_name )) {
|
||||
// cria um arquivo de template, retorna o conte<74>do.
|
||||
$template_source = "This is a new template.";
|
||||
$template_timestamp = time();
|
||||
$smarty_obj->_write_file($resource_name,$template_source);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
// n<>o <20> arquivo
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// defina a manipuladora padr<64>o
|
||||
$smarty->default_template_handler_func = 'make_template';
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
1106
docs/pt_BR/programmers/api-functions.xml
Normal file
1106
docs/pt_BR/programmers/api-functions.xml
Normal file
File diff suppressed because it is too large
Load Diff
503
docs/pt_BR/programmers/api-variables.xml
Normal file
503
docs/pt_BR/programmers/api-variables.xml
Normal file
@@ -0,0 +1,503 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="api.variables">
|
||||
<title>Vari<EFBFBD>veis</title>
|
||||
|
||||
<sect1 id="variable.template.dir">
|
||||
<title>$template_dir</title>
|
||||
<para>
|
||||
Este <20> o nome padr<64>o do diret<65>rio de template. Se voc<6F> n<>o fornecer
|
||||
um tipo de recurso quando incluir arquivos, ent<6E>o ele ir<69> ser encontrado aqui.
|
||||
Por padr<64>o isso <20> "./templates", significando que isso ir<69>
|
||||
olhar para o diret<65>rio de templates no mesmo diret<65>rio que est<73> executando
|
||||
o script PHP.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
N<>o <20> recomendado colocar este diret<65>rio sob um diret<65>rio
|
||||
document root do seu webserver.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.compile.dir">
|
||||
<title>$compile_dir</title>
|
||||
<para>
|
||||
Esse <20> o nome do diret<65>rio onde os template compilados est<73>o localizados
|
||||
Por padr<64>o isso <20> "./templates_c", significando que isso ir<69>
|
||||
olhar para o diret<65>rio de templates no mesmo diret<65>rio que est<73> executando
|
||||
o script PHP.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Essa configura<72><61>o deve ser um path relativo ou um path absoluto.
|
||||
include_path n<>o <20> usado para escrever em arquivos.
|
||||
</para>
|
||||
</note>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
N<>o <20> recomendado colocar este diret<65>rio sob um diret<65>rio
|
||||
document root do seu webserver.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.config.dir">
|
||||
<title>$config_dir</title>
|
||||
<para>
|
||||
Este <20> o diret<65>rio usado para armazenar arquivos de configura<72><61>o usados nos
|
||||
templates. O padr<64>o <20> "./configs", significando que isso ir<69>
|
||||
olhar para o diret<65>rio de templates no mesmo diret<65>rio que est<73> executando
|
||||
o script PHP.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
N<>o <20> recomendado colocar este diret<65>rio sob um diret<65>rio
|
||||
document root do seu webserver.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.plugins.dir">
|
||||
<title>$plugins_dir</title>
|
||||
<para>
|
||||
Esse <20> o diret<65>rio onde Smarty ir<69> procurar por plugins que s<>o necess<73>rios.
|
||||
O Padr<64>o <20> "plugins" sob o SMARTY_DIR. Se voc<6F>es especificar um
|
||||
path relativo, Smarty ir<69> primeiro procurar sob o SMARTY_DIR, ent<6E>o
|
||||
relativo para o cwd (current working directory), ent<6E>o relativo para cada
|
||||
entrada no seu PHP include path.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas t<>cnicas</title>
|
||||
<para>
|
||||
Para uma melhor performance, n<>o configure seu plugins_dir para ter que usar o
|
||||
PHP include path. Use um path absoluto, ou um path relativo para
|
||||
SMARTY_DIR ou o cwd.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.debugging">
|
||||
<title>$debugging</title>
|
||||
<para>
|
||||
Isso habilita o <link
|
||||
linkend="chapter.debugging.console">debugging console</link>.
|
||||
O console <20> uma janela de javascript que informa <20> voc<6F>
|
||||
sobre os arquivos de template inclu<6C>dos e vari<72>veis
|
||||
destinadas para a p<>gina de template atual.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.debug.tpl">
|
||||
<title>$debug_tpl</title>
|
||||
<para>
|
||||
Este <20> o nome do arquivo de template usado para o console de debug.
|
||||
Por padr<64>o, <20> nomeado como debug.tpl e est<73> localizado no <link
|
||||
linkend="constant.smarty.dir">SMARTY_DIR</link>.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.debugging.ctrl">
|
||||
<title>$debugging_ctrl</title>
|
||||
<para>
|
||||
Isso permite caminhos alternativos de habilitar o debug. NONE n<>o significa
|
||||
que m<>todos alternativos s<>o permitidos. URL significa quando a palavra
|
||||
SMARTY_DEBUG foi encontrado na QUERY_STRING, que o debug est<73> habilitado
|
||||
para a chamada do script.
|
||||
Se $debugging <20> true, esse valor <20> ignorado.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.global.assign">
|
||||
<title>$global_assign</title>
|
||||
<para>
|
||||
Essa <20> a lista de vari<72>veis que est<73>o sempre implicitamente fixadas
|
||||
para o template engine. Isso est<73> acess<73>vel para fazer vari<72>veis
|
||||
globais ou vari<72>veis do servidor dispon<6F>veis para todo o template
|
||||
sem ter que fix<69>-las manualmente. Cada elemento em
|
||||
$global_assign deve ser um nome de uma vari<72>vel global,
|
||||
ou um par de chave/valor, onde a chave <20> o nome do array global
|
||||
array e o valor <20> o array de vari<72>veis fixadas deste array global. $SCRIPT_NAME <20>
|
||||
globalmente fixado por padr<64>o
|
||||
para $HTTP_SERVER_VARS.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Vari<72>veis de servidor podem ser acessadas atrav<61>s da vari<72>vel
|
||||
$smarty, como {$smarty.server.SCRIPT_NAME}. Veja a se<73><65>o
|
||||
da vari<72>vel
|
||||
<link linkend="language.variables.smarty">$smarty</link>.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.undefined">
|
||||
<title>$undefined</title>
|
||||
<para>
|
||||
Isso seta o valor de $undefined para Smarty, o padr<64>o <20> null.
|
||||
Atualmente isso <20> somente usado para setar vari<72>veis indefinidas em
|
||||
$global_assign para o valor padr<64>o.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.autoload.filters">
|
||||
<title>$autoload_filters</title>
|
||||
<para>
|
||||
Se h<> algum filtro que voc<6F> deseja carregar em cada chamada de template,
|
||||
voc<6F> pode especificar-lhes usando essa vari<72>vel e a Smarty ir<69>
|
||||
automaticamente carreg<65>-los para voc<6F>. A vari<72>vel <20> um array associativo
|
||||
onde as chaves s<>o tipos de filtro e os valores s<>o arrays de nomes de filtros.
|
||||
Por exemplo:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
|
||||
'output' => array('convert'));
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.compile.check">
|
||||
<title>$compile_check</title>
|
||||
<para>
|
||||
Em cima de cada requisi<73><69>o da aplica<63><61>o PHP , Smarty testa para ver se o
|
||||
template atual foi alterado (diferentes time stamp) desde a <20>ltima
|
||||
compila<6C><61>o. Se isso foi alterado, ele ir<69> recompilar o template. Se o template
|
||||
n<>o foi compilado, ele ir<69> compilar de qualquer maneira dessa configura<72><61>o.
|
||||
Por padr<64>o esta vari<72>vel <20> setada como true. Uma vez que a aplica<63><61>o est<73>
|
||||
em produ<64><75>o (templates n<>o ser<65>o alterados), o passo compile_check
|
||||
n<>o <20> necess<73>rio. Tenha certeza de setar $compile_check para "false" para
|
||||
maior performance. Note que se voc<6F> alterar isso para "false" e o
|
||||
arquivo de template est<73> alterado, voc<6F> *n<>o* ir<69> ver a altera<72><61>o desde que
|
||||
o template seja recompilado. Se caching est<73> habilitado e
|
||||
compile_check est<73> habilitado, ent<6E>o os arquivos de cache n<>o ser<65>o regerados se
|
||||
um complexo arquivo de ou um arquivo de configura<72><61>o foi atualizado. Veja <link
|
||||
linkend="variable.force.compile">$force_compile</link> ou <link
|
||||
linkend="api.clear.compiled.tpl">clear_compiled_tpl</link>.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.force.compile">
|
||||
<title>$force_compile</title>
|
||||
<para>
|
||||
Isso for<6F>a Smarty para (re)compilar templates a cada requisi<73><69>o.
|
||||
Essa configura<72><61>o sobreescreve $compile_check. Por padr<64>o
|
||||
isso est<73> desabilitado. Isso <20> <20>til para desenvolvimento e debug.
|
||||
Isso nunca deve ser usado em ambiente de produ<64><75>o. Se caching
|
||||
est<73> habilitado, os arquivo(s) de cache ser<65>o regerados <20> todo momento.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.caching">
|
||||
<title>$caching</title>
|
||||
<para>
|
||||
Isto diz <20> Smarty se h<> ou n<>o sa<73>da de cache para o template.
|
||||
Por padr<64>o isso est<73> setado para 0, ou desabilitado. Se seu template gerar
|
||||
conte<74>do redundante, <20> necess<73>rio ligar o caching. Isso
|
||||
ir<69> resultar num ganho significativo de performance. Voc<6F> pode tamb<6D>m ter m<>ltiplos
|
||||
caches para o mesmo template. Um valor de 1 ou 2 caching habilitados. 1 diz
|
||||
<20> Smarty para usar a vari<72>vel atual $cache_lifetime para determinar se o
|
||||
cache expirou. Um valor 2 diz <20> Smarty para usar o valor cache_lifetime
|
||||
ent<6E>o para quando o cache foi gerado. Desta maneira voc<6F> pode setar o
|
||||
cache_lifetime imediatamente antes de buscar o template para ter controle
|
||||
sobre quando este cache em particular expira. Veja tamb<6D>m <link
|
||||
linkend="api.is.cached">is_cached</link>.
|
||||
</para>
|
||||
<para>
|
||||
Se $compile_check est<73> habilitado, o conte<74>do do cache ir<69> ser regerado se
|
||||
algum dos templates ou arquivos de configura<72><61>o que s<>o parte deste cache estiverem
|
||||
alterados. Se $force_compile est<73> habilitado, o conte<74>do do cache ir<69> sempre ser
|
||||
regerado.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.cache.dir">
|
||||
<title>$cache_dir</title>
|
||||
<para>
|
||||
Isso <20> o nome do diret<65>rio onde os caches do template s<>o
|
||||
armazenados. Por padr<64>o isso <20> "./cache", significando que isso ir<69> olhar
|
||||
para o diret<65>rio de cache no mesmo diret<65>rio que executar scripts PHP.
|
||||
Voc<6F> pode tambe usar sua pr<70>pria fun<75><6E>o customizada de manuseamento de cache
|
||||
para manipular arquivos de cache,
|
||||
que ir<69>o ignorar esta configura<72><61>o.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Essa configura<72><61>o deve ser ou um relativo
|
||||
ou absoluto path. include_path n<>o <20> usado para escrever em arquivos.
|
||||
</para>
|
||||
</note>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
N<>o <20> recomendado colocar este diret<65>rio sob um diret<65>rio
|
||||
document root do seu webserver.
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.cache.lifetime">
|
||||
<title>$cache_lifetime</title>
|
||||
<para>
|
||||
Isso <20> o comprimento de tempo em segundos que um cache de template <20> v<>lido.
|
||||
Uma vez que este tempo est<73> expirado, o cache ir<69> ser regerado. $caching deve
|
||||
ser configurado para "true" para $cache_lifetime para ter algum prop<6F>sito. Um valor de -1
|
||||
ir<69> for<6F>ar o cache a nunca expirar. Um valor de 0 ir<69> fazer com que o cache seja sempre regerado
|
||||
(bom somente para testes, o m<>todo mais eficiente de desabilitar caching <20> set<65>-lo para
|
||||
<link
|
||||
linkend="variable.caching">$caching</link> = false.)
|
||||
</para>
|
||||
<para>
|
||||
Se <link linkend="variable.force.compile">$force_compile</link> est<73>
|
||||
habilitado, os arquivos de cache ser<65>o regerados todo o tempo, eficazmente
|
||||
desativando caching. Voc<6F> pode limpar todos os arquivos de cache com a fun<75><6E>o <link
|
||||
linkend="api.clear.all.cache">clear_all_cache()</link>, ou
|
||||
arquivos individuais de cache (ou grupos) com a fun<75><6E>o <link
|
||||
linkend="api.clear.cache">clear_cache()</link>.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Se voc<6F> quiser dar para certos templates seu pr<70>prio tempo de vida de um cache,
|
||||
voc<6F> poderia fazer isso configurando <link linkend="variable.caching">$caching</link> = 2,
|
||||
ent<6E>o configure $cache_lifetime para um <20>nico valor somente antes de chamar display()
|
||||
ou fetch().
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<sect1 id="variable.cache.handler.func">
|
||||
<title>$cache_handler_func</title>
|
||||
<para>
|
||||
Voc<6F> pode fornecer uma fun<75><6E>o padr<64>o para manipular arquivos de cache ao inv<6E>s de
|
||||
usar o m<>todo built-in usando o $cache_dir. Veja a
|
||||
se<73><65>o <link linkend="section.template.cache.handler.func">cache
|
||||
handler function section</link> para obter detalhes.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.cache.modified.check">
|
||||
<title>$cache_modified_check</title>
|
||||
<para>
|
||||
Se configurado para true, Smarty ir<69> respeitar o If-Modified-Since
|
||||
header enviado para o cliente. Se o timestamp do arquivo de cache
|
||||
n<>o foi alterado desde a <20>ltima visita, ent<6E>o um header "304 Not Modified"
|
||||
ir<69> ser enviado ao inv<6E>s do conte<74>do. Isso funciona somente em arquivos
|
||||
de cache sem tags <command>insert</command>.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.config.overwrite">
|
||||
<title>$config_overwrite</title>
|
||||
<para>
|
||||
Se configurado para true, vari<72>veis lidas no arquivo de configura<72><61>es ir<69>o sobrescrever
|
||||
uma a outra. Do contr<74>rio, as vari<72>veis ser<65>o guardadas em um array. Isso <20>
|
||||
<20>til se voc<6F> quer armazenar arrays de dados em arquivos de configura<72><61>o, somente lista
|
||||
tempos de cada elemento m<>ltiplo. true por padr<64>o.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.config.booleanize">
|
||||
<title>$config_booleanize</title>
|
||||
<para>
|
||||
Se setado para true, os valores do arquivo de configura<72><61>o de on/true/yes e off/false/no
|
||||
ficar<61> convertido para valores booleanos automaticamente. Desta forma voc<6F> pode usar os
|
||||
valores em um template como: {if #foobar#} ... {/if}. Se foobar estiver
|
||||
on, true ou yes, a condi<64><69>o {if} ir<69> executar. true por padr<64>o.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.config.read.hidden">
|
||||
<title>$config_read_hidden</title>
|
||||
<para>
|
||||
Se configurado para true, esconde se<73><65>es (nomes de se<73><65>es come<6D>ados com um per<65>odo)
|
||||
no arquivo de configura<72><61>o podem ser lidos do template. Tipicamente voc<6F> deixaria
|
||||
isto como false, desta forma voc<6F> pode armazenar dados sensitivos no arquivo de configura<72><61>o
|
||||
como um par<61>metro de banco de
|
||||
dados e sem preocupar-se sobre o template carreg<65>-los. false <20> o padr<64>o.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.config.fix.newlines">
|
||||
<title>$config_fix_newlines</title>
|
||||
<para>
|
||||
Se setado para true, mac e dos newlines (\r e \r\n) no arquivo de configura<72><61>o ser<65>o
|
||||
convertidos para \n quando eles forem interpretados. true <20> o padr<64>o.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.default.template.handler.func">
|
||||
<title>$default_template_handler_func</title>
|
||||
<para>
|
||||
Essa fun<75><6E>o <20> chamada quando um template n<>o pode ser obtido
|
||||
de seu recurso.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.php.handling">
|
||||
<title>$php_handling</title>
|
||||
<para>
|
||||
Isso diz <20> Smarty como manipular c<>digos PHP contido nos
|
||||
templates. H<> quatro poss<73>veis configura<72><61>es, padr<64>o sendo
|
||||
SMARTY_PHP_PASSTHRU. Note que isso N<>O far<61> efeito com c<>digos php
|
||||
dentro de tags <link linkend="language.function.php">{php}{/php}</link>
|
||||
no template.
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>SMARTY_PHP_PASSTHRU - Smarty echos tags as-is.</para></listitem>
|
||||
<listitem><para>SMARTY_PHP_QUOTE - Smarty quotes the
|
||||
tags as html entities.</para></listitem>
|
||||
<listitem><para>SMARTY_PHP_REMOVE - Smarty
|
||||
ir<69> remover as tags do template.</para></listitem>
|
||||
<listitem><para>SMARTY_PHP_ALLOW - Smarty ir<69> executar as
|
||||
tags como c<>digos PHP.</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>
|
||||
NOTE: Usando c<>digos PHP code dentro de templates <20> altamente desencorajado.
|
||||
Use <link linkend="language.custom.functions">custom functions</link> ou
|
||||
<link linkend="language.modifiers">modifiers</link> ao inv<6E>s disso.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.security">
|
||||
<title>$security</title>
|
||||
<para>
|
||||
$security true/false, o padr<64>o <20> false. Security <20> bom para situa<75><61>es
|
||||
quando voc<6F> tem partes inconfi<66>veis editando o template
|
||||
(via ftp por exemplo) e voc<6F> quer reduzir os riscos de comprometimento
|
||||
da seguran<61>a do sistema atrav<61>s da linguagem de template.
|
||||
Habilitando-o faz-se cumprir as regras da linguagem de template,
|
||||
a menos que especificamente cancelada com $security_settings:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Se $php_handling est<73> setado para SMARTY_PHP_ALLOW, isso <20> implicitamente
|
||||
alterado para SMARTY_PHP_PASSTHRU</para></listitem>
|
||||
<listitem><para>Fun<EFBFBD><EFBFBD>s PHP n<>o s<>o permitidas em blocos IF,
|
||||
exceto estes especificados no $security_settings</para></listitem>
|
||||
<listitem><para>templates podem ser somente incluidos no diret<65>rio
|
||||
listado em $secure_dir array</para></listitem>
|
||||
<listitem><para>Arquivos locais podem ser somente trazidos do diret<65>rio
|
||||
listado em $secure_dir usando no array {fetch}</para></listitem>
|
||||
<listitem><para>Estas tags {php}{/php} n<>o s<>o permitidas</para></listitem>
|
||||
<listitem><para>Fun<EFBFBD><EFBFBD>es PHP n<>o s<>o permitidas como modificadores, exceto
|
||||
estes especificados no $security_settings</para></listitem>
|
||||
</itemizedlist>
|
||||
</sect1>
|
||||
<sect1 id="variable.secure.dir">
|
||||
<title>$secure_dir</title>
|
||||
<para>
|
||||
Isso <20> um array de todos os diret<65>rios locais que s<>o considerados
|
||||
seguros. {include} e {fetch} usam estes (diret<65>rios) quando security est<73> habilitado.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.security.settings">
|
||||
<title>$security_settings</title>
|
||||
<para>
|
||||
Essas configura<72><61>es s<>o usadas para cancelar ou especificar configura<72><61>es
|
||||
de seguran<61>a quando security est<73> habilitado. Estas possuem as seguintes configura<72><61>es poss<73>veis:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>PHP_HANDLING - true/false. Se setado para true,
|
||||
a configura<72><61>o de $php_handling n<>o <20> checada para security.</para></listitem>
|
||||
<listitem><para>IF_FUNCS - Isso <20> um array de nomes de fun<75><6E>es PHP permitidas
|
||||
nos blocos IF.</para></listitem>
|
||||
<listitem><para>INCLUDE_ANY - true/false. Se setado para true, algum
|
||||
template pode ser inclu<6C>do para um arquivo do sistema, apesar de toda a lista de
|
||||
$secure_dir.</para></listitem>
|
||||
<listitem><para>PHP_TAGS - true/false. Se setado para true, as tags {php}{/php}
|
||||
s<>o permitidas nos templates.</para></listitem>
|
||||
<listitem><para>MODIFIER_FUNCS - Isso <20> um array de nomes de fun<75><6E>es PHP permitidas
|
||||
usadas como modificadores de vari<72>vel.</para></listitem>
|
||||
</itemizedlist>
|
||||
</sect1>
|
||||
<sect1 id="variable.trusted.dir">
|
||||
<title>$trusted_dir</title>
|
||||
<para>
|
||||
$trusted_dir somente usado quando $security est<73> habilitado. Isso <20> um array
|
||||
de todos os diret<65>rios que s<>o considerados confi<66>veis. Diret<65>rios confi<66>veis
|
||||
s<>o onde voc<6F> ir<69> deixar seus scripts php que s<>o executados diretamente para o
|
||||
template com <link linkend="language.function.include.php">{include_php}</link>.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.left.delimiter">
|
||||
<title>$left_delimiter</title>
|
||||
<para>
|
||||
Este <20> o delimitador esquerdo usado para a linguagem de template.
|
||||
O padr<64>o <20> "{".
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.right.delimiter">
|
||||
<title>$right_delimiter</title>
|
||||
<para>
|
||||
Este <20> o delimitador direito usado para a linguagem de template.
|
||||
O padr<64>o <20> "}".
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.compiler.class">
|
||||
<title>$compiler_class</title>
|
||||
<para>
|
||||
Especifica o nome do compilador de classes que
|
||||
Smarty ir<69> usar para compilar templates. O padr<64>o <20> 'Smarty_Compiler'.
|
||||
Para usu<73>rios avan<61>ados somente.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.request.vars.order">
|
||||
<title>$request_vars_order</title>
|
||||
<para>
|
||||
A ordem na qual as vari<72>veis requeridas ser<65>o registradas, similar ao
|
||||
variables_order no php.ini
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.request.use.auto.globals">
|
||||
<title>$request_use_auto_globals</title>
|
||||
<para>
|
||||
Especifica se a Smarty deve usar vari<72>veis globais do php $HTTP_*_VARS[]
|
||||
($request_use_auto_globals=false que <20> o valor padr<64>o) ou
|
||||
$_*[] ($request_use_auto_globals=true). Isso afeta templates
|
||||
que fazem uso do {$smarty.request.*}, {$smarty.get.*} etc. .
|
||||
Aten<65><6E>o: Se voc<6F> setar $request_use_auto_globals para true, <link
|
||||
linkend="variable.request.vars.order">variable.request.vars.order
|
||||
</link> n<>o ter<65>o efeito mas valores de configura<72><61>es do php
|
||||
<literal>gpc_order</literal> s<>o usados.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.compile.id">
|
||||
<title>$compile_id</title>
|
||||
<para>
|
||||
Identificador de compila<6C><61>o persistente. Como uma alternativa
|
||||
para passar o mesmo compile_id para cada chamada de fun<75><6E>o, voc<6F>
|
||||
pode setar este compile_id e isso ir<69> ser usado implicitamente ap<61>s isso.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.use.sub.dirs">
|
||||
<title>$use_sub_dirs</title>
|
||||
<para>
|
||||
Configure isso para false se seu ambiente de PHP n<>o permite a cria<69><61>o de
|
||||
subdiret<65>rios pela Smarty. Subdiret<65>rios s<>o muito eficientes, ent<6E>o use-os se voc<6F>
|
||||
conseguir.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.default.modifiers">
|
||||
<title>$default_modifiers</title>
|
||||
<para>
|
||||
Isso <20> um array de modificadores implicitamente aplicados par cada
|
||||
vari<72>vel no template. Por Exemplo, para cada vari<72>vel HTML-escape por padr<64>o,
|
||||
use o array('escape:"htmlall"'); Para fazer a vari<72>vel isenta para modificadores
|
||||
padr<64>o, passe o modificador especial "smarty" com um valor de par<61>metro "nodefaults"
|
||||
modificando isso, como
|
||||
{$var|smarty:nodefaults}.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="variable.default.resource.type">
|
||||
<title>$default_resource_type</title>
|
||||
<para>
|
||||
Isso diz <20> Smarty qual tipo de recurso usar implicitamente.
|
||||
O valor padr<64>o <20> 'file', significando que $smarty->display('index.tpl'); e
|
||||
$smarty->display('file:index.tpl'); s<>o id<69>nticos no significado.
|
||||
Veja o cap<61>tulo <link linkend="template.resources">resource</link> para detalhes.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
396
docs/pt_BR/programmers/caching.xml
Normal file
396
docs/pt_BR/programmers/caching.xml
Normal file
@@ -0,0 +1,396 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="caching">
|
||||
<title>Caching</title>
|
||||
<para>
|
||||
Caching <20> usado para aumentar a velocidade de chamada para <link
|
||||
linkend="api.display">display()</link> ou <link
|
||||
linkend="api.fetch">fetch()</link> salvando isso num arquivo de sa<73>da. Se h<> uma vers<72>o
|
||||
de cache dispon<6F>vel para a chamada, isso <20> mostrado ao inv<6E>s de regerar a sa<73>da de dados.
|
||||
Caching pode fazer coisas tremendamente r<>pidas,
|
||||
especialmente templates com longo tempo computacional. Desde a sa<73>da de dados do
|
||||
display() ou fetch() est<73> em cache, um arquivo de cache poderia ser composto por
|
||||
diversos arquivos de templates, arquivos de configura<72><61>o, etc.
|
||||
</para>
|
||||
<para>
|
||||
Desde que templates sejam din<69>micos, <20> importante isso ter cuidado com
|
||||
o que voc<6F> est<73> fazendo cache e por quanto tempo. Por exemplo, se voc<6F> est<73> mostrando
|
||||
a p<>gina principal do seu website na qual as altera<72><61>es de conte<74>do s<>o muito frequentes,
|
||||
isso funciona bem para cache dessa por uma hora ou mais. Um outro modo, se voc<6F> est<73>
|
||||
mostrando uma p<>gina com um mapa do tempo contendo novas informa<6D><61>es por minuto, n<>o
|
||||
faz sentido fazer cache nesta p<>gina.
|
||||
</para>
|
||||
<sect1 id="caching.setting.up">
|
||||
<title>Configurando Caching</title>
|
||||
<para>
|
||||
A primeira coisa a fazer <20> habilitar o caching. Isso <20> feito pela configura<72><61>o <link
|
||||
linkend="variable.caching">$caching</link> = true (or 1.)
|
||||
</para>
|
||||
<example>
|
||||
<title>Habilitando Caching</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
$smarty->display('index.tpl');</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Com caching habilitado, a chamada para a fun<75><6E>o display('index.tpl') ir<69> trazer
|
||||
o template como usual, mas tamb<6D>m
|
||||
salva uma c<>pia disso para o arquivo de sa<73>da (uma c<>pia de cache) in the <link linkend="variable.cache.dir">$cache_dir</link>.
|
||||
Na pr<70>xima chamada de display('index.tpl'), a c<>pia em cache ser<65> usada
|
||||
ao inv<6E>s de trazer novamente o template.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Os arquivos no $cache_dir s<>o nomeados com similaridade ao nome do arquivo de template.
|
||||
Embora eles terminem com a extens<6E>o ".php", eles n<>o s<>o realmente scripts execut<75>veis de php.
|
||||
N<>o edite estes arquivos!
|
||||
</para>
|
||||
</note>
|
||||
<para>
|
||||
Cada p<>gina em cache tem um per<65>odo de tempo limitado determinado por <link
|
||||
linkend="variable.cache.lifetime">$cache_lifetime</link>. O padr<64>o do valor <20>
|
||||
3600 segundos, ou 1 hora. Ap<41>s o tempo expirar, o cache <20> regerado.
|
||||
<09> poss<73>vel dar tempos individuais para caches com seu pr<70>prio tempo
|
||||
de expira<72><61>o pela configura<72><61>o $caching = 2. Veja a documenta<74><61>o em <link
|
||||
linkend="variable.cache.lifetime">$cache_lifetime</link> para detalhes.
|
||||
</para>
|
||||
<example>
|
||||
<title>Configurando cache_lifetime por cache</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = 2; // lifetime is per cache
|
||||
|
||||
// set the cache_lifetime for index.tpl to 5 minutes
|
||||
$smarty->cache_lifetime = 300;
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
// set the cache_lifetime for home.tpl to 1 hour
|
||||
$smarty->cache_lifetime = 3600;
|
||||
$smarty->display('home.tpl');
|
||||
|
||||
// NOTE: the following $cache_lifetime setting will not work when $caching = 2.
|
||||
// The cache lifetime for home.tpl has already been set
|
||||
// to 1 hour, and will no longer respect the value of $cache_lifetime.
|
||||
// The home.tpl cache will still expire after 1 hour.
|
||||
$smarty->cache_lifetime = 30; // 30 seconds
|
||||
$smarty->display('home.tpl');</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Se <link linkend="variable.compile.check">$compile_check</link> est<73> habilitado,
|
||||
cada arquivo de template e arquivo de configura<72><61>o que est<73> envolvido com o arquivo em cache
|
||||
<09> checado por modifica<63><61>es. Se algum destes arquivos foi modificado desde que o <20>ltimo cache
|
||||
foi gerado, o cache <20> imediatamente regerado.
|
||||
Isso <20> ligeiramente uma forma de optimiza<7A><61>o de performance de overhead, deixe $compile_check setado para false.
|
||||
</para>
|
||||
<example>
|
||||
<title>Habilitando $compile_check</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
$smarty->compile_check = true;
|
||||
|
||||
$smarty->display('index.tpl');</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Se <link linkend="variable.force.compile">$force_compile</link> est<73> habilitado,
|
||||
os arquivos de cache ir<69>o sempre ser regerados. Isso <20> efetivamente desativar caching.
|
||||
$force_compile <20> usualmente para prop<6F>sitos de debug somente, um caminho mais
|
||||
eficiente de desativar caching <20> setar o <link
|
||||
linkend="variable.caching">$caching</link> = false (ou 0.)
|
||||
</para>
|
||||
<para>
|
||||
A fun<75><6E>o <link linkend="api.is.cached">is_cached()</link>
|
||||
pode ser usada para testar se um template tem um cache v<>lido ou n<>o.
|
||||
Se voc<6F> tem um template com cache que requer alguma coisa como um retorno do banco de dados,
|
||||
voc<6F> pode usar isso para pular este processo.
|
||||
</para>
|
||||
<example>
|
||||
<title>Usando is_cached()</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
if(!$smarty->is_cached('index.tpl')) {
|
||||
// No cache available, do variable assignments here.
|
||||
$contents = get_database_contents();
|
||||
$smarty->assign($contents);
|
||||
}
|
||||
|
||||
$smarty->display('index.tpl');</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Voc<6F> pode deixar partes da sua p<>gina din<69>mica com a fun<75><6E>o de template <link
|
||||
linkend="language.function.insert">insert</link>.
|
||||
Vamos dizer que sua p<>gina inteira pode ter cache exceto para um banner que <20>
|
||||
mostrado abaixo do lado direito da sua p<>gina. Usando uma fun<75><6E>o insert para o banner,
|
||||
voc<6F> pode deixar esse elemento din<69>mico dentro do conte<74>do de cache. Veja a documenta<74><61>o
|
||||
em <link linkend="language.function.insert">insert</link> para
|
||||
detalhes e exemplos.
|
||||
</para>
|
||||
<para>
|
||||
Voc<6F> pode limpar todos os arquivos de cache com a fun<75><6E>o <link
|
||||
linkend="api.clear.all.cache">clear_all_cache()</link>, ou
|
||||
arquivos de cache individuais (ou grupos) com a fun<75><6E>o <link
|
||||
linkend="api.clear.cache">clear_cache()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Limpando o cache</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
// clear out all cache files
|
||||
$smarty->clear_all_cache();
|
||||
|
||||
// clear only cache for index.tpl
|
||||
$smarty->clear_cache('index.tpl');
|
||||
|
||||
$smarty->display('index.tpl');</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
<sect1 id="caching.multiple.caches">
|
||||
<title>Multiple Caches Per Page</title>
|
||||
<para>
|
||||
Voc<6F> pode ter m<>ltiplos arquivos de cache para uma simples chamada de display()
|
||||
ou fetch(). Vamos dizer que uma chamada para display('index.tpl') deve ter v<>rios
|
||||
conte<74>do de sa<73>da diferentes dependendo de alguma condi<64><69>o, e voc<6F> quer separar
|
||||
os caches para cada um. Voc<6F> pode fazer isso passando um cache_id como um
|
||||
segundo par<61>metro para a chamada da fun<75><6E>o.
|
||||
</para>
|
||||
<example>
|
||||
<title>Passando um cache_id para display()</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
$my_cache_id = $_GET['article_id'];
|
||||
|
||||
$smarty->display('index.tpl',$my_cache_id);</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Acima, n<>s estamos passando a vari<72>vel $my_cache_id para display() com o
|
||||
cache_id. Para cada valor <20>nico de $my_cache_id, um cache em separado ir<69> ser
|
||||
gerado para index.tpl. Nesse exemplo, "article_id" foi passado em URL e <20> usado
|
||||
como o cache_id.
|
||||
</para>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
Tenha muito cuidado quando passar valores do cliente (web brownser) dentro
|
||||
da Smarty (ou alguma aplica<63><61>o PHP.) Embora o exemplo acima usando o article_id
|
||||
vindo de uma URL pare<72>a f<>cil, isso poderia ter consequ<71>ncias ruins. O
|
||||
cache_id <20> usado para criar um diret<65>rio no sistema de arquivos, ent<6E>o se o usu<73>rio
|
||||
decidir passar um valor extremamente largo para article_id, ou escrever um script
|
||||
que envia article_ids rand<6E>micos em um ritmo r<>pido, isso poderia possivelmente causar
|
||||
problemas em n<>vel de servidor. Tenha certeza de limpar algum dado passado antes de usar isso. Nessa inst<73>ncia, talvez voc<6F>
|
||||
saiba que o article_id tem um comprimento de 10 caracteres e isso <20> constitu<74>do somente
|
||||
de alfa-num<75>ricos, e deve ser um
|
||||
article_id v<>lido no database. Verifique isso!
|
||||
</para>
|
||||
</note>
|
||||
<para>
|
||||
Tenha certeza de passar o mesmo cache_id como o segundo
|
||||
par<61>metro para <link linkend="api.is.cached">is_cached()</link> e
|
||||
<link linkend="api.clear.cache">clear_cache()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Passando um cache_id para is_cached()</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
$my_cache_id = $_GET['article_id'];
|
||||
|
||||
if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
|
||||
// No cache available, do variable assignments here.
|
||||
$contents = get_database_contents();
|
||||
$smarty->assign($contents);
|
||||
}
|
||||
|
||||
$smarty->display('index.tpl',$my_cache_id);</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Voc<6F> pode limpar todos os caches para um cache_id em particular passando
|
||||
o primeiro par<61>metro null para clear_cache().
|
||||
</para>
|
||||
<example>
|
||||
<title>Limpando todos os caches para um cache_id em particular</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
// clear all caches with "sports" as the cache_id
|
||||
$smarty->clear_cache(null,"sports");
|
||||
|
||||
$smarty->display('index.tpl',"sports");</programlisting>
|
||||
</example>
|
||||
<para>
|
||||
Desta maneira, voc<6F> pode "agrupar" seus
|
||||
caches juntos dando-lhes o mesmo cache_id.
|
||||
</para>
|
||||
</sect1>
|
||||
<sect1 id="caching.groups">
|
||||
<title>Grupos de Cache</title>
|
||||
<para>
|
||||
Voc<6F> pode fazer agrupamentos mais elaborados configurando grupos de cache_id. Isso <20>
|
||||
realizado pela separa<72><61>o de cada sub-grupo com uma barra vertical "|" no valor do
|
||||
cache_id. Voc<6F> pode ter muitos sub-grupos com voc<6F> desejar.
|
||||
</para>
|
||||
<example>
|
||||
<title>Grupos de cache_id</title>
|
||||
<programlisting>
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
$smarty->caching = true;
|
||||
|
||||
// clear all caches with "sports|basketball" as the first two cache_id groups
|
||||
$smarty->clear_cache(null,"sports|basketball");
|
||||
|
||||
// clear all caches with "sports" as the first cache_id group. This would
|
||||
// include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
|
||||
$smarty->clear_cache(null,"sports");
|
||||
|
||||
$smarty->display('index.tpl',"sports|basketball");</programlisting>
|
||||
</example>
|
||||
<note>
|
||||
<title>Notas T<>cnicas</title>
|
||||
<para>
|
||||
O agrupamento de cache id N<>O use o path do template como alguma parte do cache_id.
|
||||
Por exemplo, se voc<6F> tem display('themes/blue/index.tpl'), voc<6F> n<>o pode limpar o cache
|
||||
para tudo que estiver sob o diret<65>rio "themes/blue". Se voc<6F> quiser fazer isso, voc<6F> deve
|
||||
agrup<75>-los no cache_id, como display('themes/blue/index.tpl','themes|blue'); Ent<6E>o
|
||||
voc<6F> pode limpar os caches para o
|
||||
tema azul com with clear_cache(null,'themes|blue');
|
||||
</para>
|
||||
</note>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="caching.cacheable">
|
||||
<title>Controlling Cacheability of Plugins' Output</title>
|
||||
<para>
|
||||
Desde Smarty-2.6.0 os caches de plugins pode ser declarados
|
||||
ao registr<74>-los. O terceiro par<61>metro para register_block,
|
||||
register_compiler_function e register_function <20> chamado
|
||||
<parameter>$cacheable</parameter> e o padr<64>o para true que <20> tamb<6D>m
|
||||
o comportamento de plugins na vers<72>o da Smarty antecessores <20> 2.6.0
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Quando registrando um plugin com $cacheable=false o plugin <20> chamado todo o tempo na p<>gina que est<73> sendo mostrada, sempre se a p<>gina vier do cache. A fun<75><6E>o de plugin tem um comportamento levemente como uma fun<75><6E>o <link linkend="plugins.inserts">insert</link>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Em contraste para <link linkend="language.function.insert">{insert}</link> o atributo para o plugin n<>o est<73> em cache por padr<64>o. Eles podem ser declarados para serem cacheados com o quarto par<61>metro <parameter>$cache_attrs</parameter>. <parameter>$cache_attrs</parameter> <20> um array de nomes de atributos que devem ser cacheados, ent<6E>o a fun<75><6E>o de plugin pega o valor como isso sendo o tempo que a p<>gina foi escrita para o cache todo o tempo isso <20> buscado do cache.
|
||||
</para>
|
||||
|
||||
<example>
|
||||
<title>Prevenindo uma sa<73>da de plugin de ser cacheada</title>
|
||||
<programlisting>
|
||||
index.php:
|
||||
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
$smarty->caching = true;
|
||||
|
||||
function remaining_seconds($params, &$smarty) {
|
||||
$remain = $params['endtime'] - time();
|
||||
if ($remain >=0)
|
||||
return $remain . " second(s)";
|
||||
else
|
||||
return "done";
|
||||
}
|
||||
|
||||
$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime'));
|
||||
|
||||
if (!$smarty->is_cached('index.tpl')) {
|
||||
// fetch $obj from db and assign...
|
||||
$smarty->assign_by_ref('obj', $obj);
|
||||
}
|
||||
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
|
||||
index.tpl:
|
||||
|
||||
Tempo restante: {remain endtime=$obj->endtime}</programlisting>
|
||||
<para>
|
||||
O n<>mero de segundos at<61> que o endtime de $obj alcan<61>a altera<72><61>es em cada display de p<>gina, mesmo que a p<>gina esteja em cache. Desde o atributo endtime esteja em cache o objeto somente tem que ser puxado do banco de dados quando a p<>gina est<73> escrita para o cache mas n<>o em requisi<73><69>es subsequentes da p<>gina.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
|
||||
<example>
|
||||
<title>Prevenindo uma passagem inteira do template para o cache</title>
|
||||
<programlisting>
|
||||
index.php:
|
||||
|
||||
require('Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
$smarty->caching = true;
|
||||
|
||||
function smarty_block_dynamic($param, $content, &$smarty) {
|
||||
return $content;
|
||||
}
|
||||
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
|
||||
|
||||
$smarty->display('index.tpl');
|
||||
|
||||
|
||||
index.tpl:
|
||||
|
||||
Page created: {"0"|date_format:"%D %H:%M:%S"}
|
||||
|
||||
{dynamic}
|
||||
|
||||
Now is: {"0"|date_format:"%D %H:%M:%S"}
|
||||
|
||||
... do other stuff ...
|
||||
|
||||
{/dynamic}</programlisting>
|
||||
|
||||
</example>
|
||||
<para>
|
||||
Quando recarregado a p<>gina que voc<6F> ir<69> notar que ambas as datas diferem. Uma <20> "din<69>mica" e uma <20> "est<73>tica". Voc<6F> pode fazer qualquer coisa entre as tags {dynamic}...{/dynamic} e ter certeza que isso n<>o ir<69> ficar em cache como o restante da p<>gina.
|
||||
</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
802
docs/pt_BR/programmers/plugins.xml
Normal file
802
docs/pt_BR/programmers/plugins.xml
Normal file
@@ -0,0 +1,802 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="plugins">
|
||||
<title>Extendendo a Smarty com Plugins</title>
|
||||
<para>
|
||||
A Vers<72>o 2.0 introduziu a arquitetura de plugin que <20> usada para quase todas as
|
||||
funcionalidades customiz<69>veis da Smarty. Isto inclui:
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem><simpara>fun<EFBFBD><EFBFBD>es</simpara></listitem>
|
||||
<listitem><simpara>modificadores</simpara></listitem>
|
||||
<listitem><simpara>fun<EFBFBD><EFBFBD>es de bloco</simpara></listitem>
|
||||
<listitem><simpara>fun<EFBFBD><EFBFBD>es de compilador</simpara></listitem>
|
||||
<listitem><simpara>prefiltros</simpara></listitem>
|
||||
<listitem><simpara>posfiltros</simpara></listitem>
|
||||
<listitem><simpara>filtros de sa<73>da</simpara></listitem>
|
||||
<listitem><simpara>recursos</simpara></listitem>
|
||||
<listitem><simpara>inserir</simpara></listitem>
|
||||
</itemizedlist>
|
||||
Com a exce<63><65>o de recursos, a compatibilidade com a forma antiga de fun<75><6E>es de
|
||||
manipulador de registro via register_* API <20> preservada. Se voc<6F> n<>o usou o API mas no lugar disso
|
||||
modificou as vari<72>veis de classe <literal>$custom_funcs</literal>, <literal>$custom_mods</literal>, e
|
||||
outras diretamente, ent<6E>o voc<6F> vai
|
||||
precisar ajustar seus scripts para ou usar API ou converter suas
|
||||
funcionalidade customizadas em plugins.
|
||||
</para>
|
||||
|
||||
<sect1>
|
||||
<title>Como os Plugins Funcionam</title>
|
||||
<para>
|
||||
Plugins s<>o sempre lidos quando requisitados. Apenas os modificadores espec<65>ficos,
|
||||
fun<75><6E>es, recursos, etc convocados em scripts de template ser<65>o lidos. Al<41>m disso, cada plugin
|
||||
<20> lido apenas uma vez, mesmo se voc<6F> tem v<>rias inst<73>ncias diferentes da Smarty rodando na mesma
|
||||
requisi<73><69>o.
|
||||
</para>
|
||||
<para>
|
||||
Pre/posfiltros e filtros de sa<73>da s<>o uma parte de um caso especial. Visto que eles n<>o s<>o mencionados
|
||||
nos templates, eles devem ser registrados ou lidos explicitamente via fun<75><6E>es de API antes do template
|
||||
ser processado.
|
||||
A ordem em que multiplos filtros do mesmo
|
||||
tipo s<>o executados dependem da ordem em que eles s<>o registrados ou lidos.
|
||||
</para>
|
||||
<para>
|
||||
O <link linkend="variable.plugins.dir">diret<EFBFBD>rio de plugins</link>
|
||||
pode ser uma string contendo um caminho ou um array
|
||||
contendo multiplos caminhos. Para instalar um plugin,
|
||||
simplesmente coloque-o em um dos diret<65>rios e a Smarty ir<69> us<75>-lo automaticamente.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.naming.conventions">
|
||||
<title>Conven<EFBFBD><EFBFBD>es de Apar<61>ncia</title>
|
||||
<para>
|
||||
Arquivos e fun<75><6E>es de Plugin devem seguir uma conven<65><6E>o de apar<61>ncia muito espec<65>fica
|
||||
a fim de ser localizada pela Smarty.
|
||||
</para>
|
||||
<para>
|
||||
Os arquivos de plugin devem ser nomeados da sequinte forma:
|
||||
<blockquote>
|
||||
<para>
|
||||
<filename>
|
||||
<replaceable>tipo</replaceable>.<replaceable>nome</replaceable>.php
|
||||
</filename>
|
||||
</para>
|
||||
</blockquote>
|
||||
</para>
|
||||
<para>
|
||||
Onde <literal>tipo</literal> <20> um dos seguintes tipos de plugin:
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem><simpara>function</simpara></listitem>
|
||||
<listitem><simpara>modifier</simpara></listitem>
|
||||
<listitem><simpara>block</simpara></listitem>
|
||||
<listitem><simpara>compiler</simpara></listitem>
|
||||
<listitem><simpara>prefilter</simpara></listitem>
|
||||
<listitem><simpara>postfilter</simpara></listitem>
|
||||
<listitem><simpara>outputfilter</simpara></listitem>
|
||||
<listitem><simpara>resource</simpara></listitem>
|
||||
<listitem><simpara>insert</simpara></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
E <literal>nome</literal> seria um identificador v<>lido (letras,
|
||||
n<>meros, e underscores apenas).
|
||||
</para>
|
||||
<para>
|
||||
Alguns exemplos: <literal>function.html_select_date.php</literal>,
|
||||
<literal>resource.db.php</literal>,
|
||||
<literal>modifier.spacify.php</literal>.
|
||||
</para>
|
||||
<para>
|
||||
As fun<75><6E>es de plugin dentro dos arquivos do plugin devem ser nomeadas da seguinte forma:
|
||||
<blockquote>
|
||||
<para>
|
||||
<function>smarty_<replaceable>tipo</replaceable>_<replaceable>nome</replaceable></function>
|
||||
</para>
|
||||
</blockquote>
|
||||
</para>
|
||||
<para>
|
||||
O significado de <literal>tipo</literal> e
|
||||
<literal>nome</literal> s<>o os mesmos de antes.
|
||||
</para>
|
||||
<para>
|
||||
A Smarty mostrar<61> mensagens de erro apropriadas se o arquivo de plugins que <20> necess<73>rio n<>o <20> encontrado,
|
||||
ou se o arquivo ou a fun<75><6E>o de plugin
|
||||
est<73>o nomeadas inadequadamente.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.writing">
|
||||
<title>Escrevendo Plugins</title>
|
||||
<para>
|
||||
Os Plugins podem ser ou lidos pela Smarty automaticamente do sistema de arquivos ou eles podem
|
||||
ser registrados no tempo de execu<63><75>o via uma das fun<75><6E>es
|
||||
de API register_* . Eles podem tamb<6D>m ser
|
||||
com o uso da fun<75><6E>o API unregister_* .
|
||||
</para>
|
||||
<para>
|
||||
Para os plugins que s<>o registrados no tempo de execu<63><75>o, o nome da(s) fun<75><6E>o(<28>es) de plugin
|
||||
n<>o t<>m que seguir a conven<65><6E>o de apar<61>ncia.
|
||||
</para>
|
||||
<para>
|
||||
Se um plugin depende de alguma funcionalidade fornecida por um outro plugin (como <20> o caso com alguns
|
||||
plugins embutidos com a Smarty),
|
||||
ent<6E>o a forma apropriada para ler o plugin necess<73>rio <20> esta:
|
||||
</para>
|
||||
<programlisting>
|
||||
require_once $smarty->_get_plugin_filepath('function', 'html_options');</programlisting>
|
||||
<para>
|
||||
Como uma regra geral, o objeto da Smarty <20> sempre passado para os plugins como o <20>ltimo par<61>metro
|
||||
(com duas exce<63><65>es: modificadores n<>o passam o objeto da Smarty em tudo e blocks passam
|
||||
<parameter>&$repeat</parameter> depois do objeto da Smarty
|
||||
para manter compatibilidade a antigas
|
||||
vers<72>es da Smarty).
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.functions"><title>Fun<EFBFBD><EFBFBD>es de Template</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>void <function>smarty_function_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>array <parameter>$params</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
Todos os atributos passados para as fun<75><6E>es de template a
|
||||
partir do template est<73>o contidas em
|
||||
<parameter>$params</parameter> como um array associativo. Ou acessa esses valores
|
||||
diretamente i.e <varname>$params['start']</varname> ou usa
|
||||
<varname>extract($params)</varname> para
|
||||
import<72>-los para dentro da tabela s<>mbolo.
|
||||
</para>
|
||||
<para>
|
||||
A sa<73>da (valor de retorno) da fun<75><6E>o ser<65> substitu<74>da no lugar da tag da fun<75><6E>o no template
|
||||
(a fun<75><6E>o <function>fetch</function>, por exemplo). Alternativamente, a fun<75><6E>o pode simplesmente executar
|
||||
alguma outra tarefa sem ter alguma sa<73>da
|
||||
(a fun<75><6E>o <function>assign</function>).
|
||||
</para>
|
||||
<para>
|
||||
Se a fun<75><6E>o precisa passar valores a algumas vari<72>veis para o template ou utilizar alguma outra funcionalidade
|
||||
fornecida com a Smarty, ela pode usar
|
||||
o objeto <parameter>$smarty</parameter> fornecido para fazer isso.
|
||||
</para>
|
||||
<para>
|
||||
Veja tamb<6D>m:
|
||||
<link linkend="api.register.function">register_function()</link>,
|
||||
<link linkend="api.unregister.function">unregister_function()</link>.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>fun<EFBFBD><EFBFBD>o de plugin com sa<73>da</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: function.eightball.php
|
||||
* Type: function
|
||||
* Name: eightball
|
||||
* Purpose: outputs a random magic answer
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_eightball($params, &$smarty)
|
||||
{
|
||||
$answers = array('Yes',
|
||||
'No',
|
||||
'No way',
|
||||
'Outlook not so good',
|
||||
'Ask again soon',
|
||||
'Maybe in your reality');
|
||||
|
||||
$result = array_rand($answers);
|
||||
return $answers[$result];
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
que pode ser usada no template da seguinte forma:
|
||||
</para>
|
||||
<programlisting>
|
||||
Pergunta: N<>s sempre teremos tempo para viajar?
|
||||
Resposta: {eightball}.</programlisting>
|
||||
<para>
|
||||
<example>
|
||||
<title>fun<EFBFBD><EFBFBD>o de plugin sem sa<73>da</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: function.assign.php
|
||||
* Type: function
|
||||
* Name: assign
|
||||
* Purpose: assign a value to a template variable
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_function_assign($params, &$smarty)
|
||||
{
|
||||
extract($params);
|
||||
|
||||
if (empty($var)) {
|
||||
$smarty->trigger_error("assign: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!in_array('value', array_keys($params))) {
|
||||
$smarty->trigger_error("assign: missing 'value' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty->assign($var, $value);
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.modifiers"><title>Modifiers</title>
|
||||
<para>
|
||||
Modificadores s<>o fun<75><6E>es que s<>o aplicadas a uma vari<72>vel no template antes dela ser mostrada
|
||||
ou usada em algum outro contexto.
|
||||
Modificadores podem ser encadeados juntos.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>mixed <function>smarty_modifier_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>mixed <parameter>$value</parameter></paramdef>
|
||||
<paramdef>[mixed <parameter>$param1</parameter>, ...]</paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
O primeiro par<61>metro para o plugin midificador <20> o valor em que o modificador <20> suposto
|
||||
operar. O resto dos par<61>metros podem ser opcionais,
|
||||
dependendo de qual tipo de opera<72><61>o <20> para
|
||||
ser executada.
|
||||
</para>
|
||||
<para>
|
||||
O modificador deve retornar o resultado de seu processamento.
|
||||
</para>
|
||||
<para>
|
||||
Veja tamb<6D>m:
|
||||
<link linkend="api.register.modifier">register_modifier()</link>,
|
||||
<link linkend="api.unregister.modifier">unregister_modifier()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Plugin modificador simples</title>
|
||||
<para>
|
||||
Este plugin basiamente <20> um alias de uma
|
||||
fun<75><6E>o do PHP. Ele n<>o tem nenhum par<61>metro adicional.
|
||||
</para>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: modifier.capitalize.php
|
||||
* Type: modifier
|
||||
* Name: capitalize
|
||||
* Purpose: capitalize words in the string
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_capitalize($string)
|
||||
{
|
||||
return ucwords($string);
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
<para></para>
|
||||
<example>
|
||||
<title>Plugin modificador mais complexo</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: modifier.truncate.php
|
||||
* Type: modifier
|
||||
* Name: truncate
|
||||
* Purpose: Truncate a string to a certain length if necessary,
|
||||
* optionally splitting in the middle of a word, and
|
||||
* appending the $etc string.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
|
||||
$break_words = false)
|
||||
{
|
||||
if ($length == 0)
|
||||
return '';
|
||||
|
||||
if (strlen($string) > $length) {
|
||||
$length -= strlen($etc);
|
||||
$fragment = substr($string, 0, $length+1);
|
||||
if ($break_words)
|
||||
$fragment = substr($fragment, 0, -1);
|
||||
else
|
||||
$fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
|
||||
return $fragment.$etc;
|
||||
} else
|
||||
return $string;
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.block.functions"><title>Block Functions</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>void <function>smarty_block_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>array <parameter>$params</parameter></paramdef>
|
||||
<paramdef>mixed <parameter>$content</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
Fun<75><6E>es de Block s<>o fun<75><6E>es da forma: {func} .. {/func}. Em outras palavras, ele enclausura
|
||||
um bloco de template e opera no conte<74>do deste bloco. Fun<75><6E>es de Block tem preced<65>ncia sobre
|
||||
fun<75><6E>es customizadas com mesmo nome,
|
||||
assim, voc<6F> n<>o pode ter ambas, fun<75><6E>o customiz<69>vel {func} e
|
||||
fun<75><6E>o de Bloco {func} .. {/func}.
|
||||
</para>
|
||||
<para>
|
||||
Por defini<6E><69>o a implementa<74><61>o de sua fun<75><6E>o <20> chamada duas vezes pela Smarty: uma vez pela tag de abertura,
|
||||
e outra pela tag de fechamento
|
||||
(veja <literal>&$repeat</literal> abaixo para como mudar isto).
|
||||
</para>
|
||||
<para>
|
||||
Apenas a tag de abertura da fun<75><6E>o de bloco pode ter atributos.
|
||||
Todos os atributos passados para as fun<75><6E>es de
|
||||
template est<73>o contidos em <parameter>$params</parameter> como um array associativo. Voc<6F> pode ou acessar
|
||||
esses valores diretamente, i.e. <varname>$params['start']</varname>
|
||||
ou usar <varname>extract($params)</varname>
|
||||
para import<72>-los para dentro da tabela s<>mbolo. Os atributos da tag de
|
||||
abertura s<>o tamb<6D>m acess<73>veis a sua fun<75><6E>o
|
||||
quando processando a tag de fechamento.
|
||||
</para>
|
||||
<para>
|
||||
O valor da vari<72>vel <parameter>$content</parameter>
|
||||
depende de que se sua fun<75><6E>o <20> chamada pela tag de
|
||||
fechamento ou de abertura. Caso seja a de abertura, ele ser<65>
|
||||
<literal>null</literal>, se for a de fechamento
|
||||
o valor ser<65> do conte<74>do do bloco de template.
|
||||
Note que o bloco de template j<> ter<65> sido processado pela
|
||||
Smarty, ent<6E>o tudo que voc<6F> receber<65> <20> sa<73>da do template, n<>o o template original.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
O par<61>metro <parameter>&$repeat</parameter> <20> passado por
|
||||
refer<65>ncia para a fun<75><6E>o de implementa<74><61>o
|
||||
e fornece uma possibilidade para ele controlar quantas
|
||||
vezes o bloco <20> mostrado. Por defini<6E><69>o
|
||||
<parameter>$repeat</parameter> <20> <literal>true</literal> na primeira chamada da block-function
|
||||
(a tag de abertura do bloco) e <literal>false</literal>
|
||||
em todas as chamadas subsequentes <20> fun<75><6E>o de bloco
|
||||
(a tag de fechamento do bloco). Cada vez que a
|
||||
implementa<74><61>o da fun<75><6E>o retorna com o <parameter>&$repeat</parameter>
|
||||
sendo true, o conte<74>do entre {func} .. {/func} <20> avaliado
|
||||
e a implementa<74><61>o da fun<75><6E>o <20> chamada novamente com
|
||||
o novo conte<74>do do bloco no par<61>metro <parameter>$content</parameter>.
|
||||
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Se voc<6F> tem fun<75><6E>es de bloco aninhadas, <20> poss<73>vel
|
||||
descobrir qual <20> a fun<75><6E>o de bloco pai acessando
|
||||
a vari<72>vel <varname>$smarty->_tag_stack</varname>. Apenas fa<66>a um var_dump()
|
||||
nela e a estrutura estaria vis<69>vel.
|
||||
</para>
|
||||
<para>
|
||||
See also:
|
||||
<link linkend="api.register.block">register_block()</link>,
|
||||
<link linkend="api.unregister.block">unregister_block()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>fun<EFBFBD><EFBFBD>o de bloco</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: block.translate.php
|
||||
* Type: block
|
||||
* Name: translate
|
||||
* Purpose: translate a block of text
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_block_translate($params, $content, &$smarty)
|
||||
{
|
||||
if (isset($content)) {
|
||||
$lang = $params['lang'];
|
||||
// do some intelligent translation thing here with $content
|
||||
return $translation;
|
||||
}
|
||||
}</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.compiler.functions"><title>Fun<EFBFBD><EFBFBD>es Compiladoras</title>
|
||||
<para>
|
||||
Fun<75><6E>es compiladoras s<> s<>o chamadas durante a compila<6C><61>o do template.
|
||||
Elas s<>o <20>teis para inje<6A><65>o de c<>digo PHP ou conte<74>do est<73>tico time-sensitive
|
||||
dentro do template. Se h<> ambos, uma fun<75><6E>o
|
||||
compiladora e uma fun<75><6E>o customiz<69>vel
|
||||
registrada sob o mesmo nome, a fun<75><6E>o compiladora tem preced<65>ncia.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>mixed <function>smarty_compiler_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>string <parameter>$tag_arg</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
<20> fun<75><6E>o compiladora s<>o passados dois par<61>metros:
|
||||
a tag string de argumento da tag - basicamente, tudo a partir
|
||||
do nome da fun<75><6E>o at<61> o delimitador de fechamento, e o objeto da Smarty. <20> suposto que retorna o c<>digo PHP
|
||||
para ser injetado dentro do template compilado.
|
||||
</para>
|
||||
<para>
|
||||
See also
|
||||
<link linkend="api.register.compiler.function">register_compiler_function()</link>,
|
||||
<link linkend="api.unregister.compiler.function">unregister_compiler_function()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>fun<EFBFBD><EFBFBD>o compiladora simples</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: compiler.tplheader.php
|
||||
* Type: compiler
|
||||
* Name: tplheader
|
||||
* Purpose: Output header containing the source file name and
|
||||
* the time it was compiled.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_compiler_tplheader($tag_arg, &$smarty)
|
||||
{
|
||||
return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
|
||||
}
|
||||
?></programlisting>
|
||||
<para>
|
||||
Esta fun<75><6E>o pode ser chamada em um template da seguinte forma:
|
||||
</para>
|
||||
<programlisting>
|
||||
{* esta fun<75><6E>o <20> executada somente no tempo de compila<6C><61>o *}
|
||||
{tplheader}</programlisting>
|
||||
<para>
|
||||
O c<>digo PHP resultante no template compilado seria algo assim:
|
||||
</para>
|
||||
<programlisting>
|
||||
<php
|
||||
echo 'index.tpl compiled at 2002-02-20 20:02';
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.prefilters.postfilters">
|
||||
<title>Prefiltros/Posfiltros</title>
|
||||
<para>
|
||||
Plugins Prefilter e postfilter s<>o muito similares
|
||||
em conceito; onde eles diferem <20> na execu<63><75>o -- mais
|
||||
precisamente no tempo de suas execu<63><75>es.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>smarty_prefilter_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>string <parameter>$source</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
Prefilters s<>o usados para processar o fonte do template
|
||||
imediatamente antes da compila<6C><61>o. O primeiro par<61>metro da
|
||||
fun<75><6E>o de prefilter <20> o fonte do template, possivelmente modificado por alguns outros prefilters. O Plugin
|
||||
<20> suposto retornar o fonte modificado. Note que este fonte n<>o <20> salvo em lugar nenhum, ele s<> <20> usado para
|
||||
a compila<6C><61>o.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>smarty_postfilter_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>string <parameter>$compiled</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
Postfilters s<>o usados para processar a sa<73>da compilada do template (o c<>digo PHP) imediatamente ap<61>s
|
||||
a compila<6C><61>o ser feita e antes do template compilado ser
|
||||
salvo no sistema de arquivo. O primeiro par<61>metro
|
||||
para a fun<75><6E>o postfilter <20> o c<>digo do template compilado,
|
||||
possivelmente modificado por outros postfilters.
|
||||
O plugin <20> suposto retornar a vers<72>o modificada deste c<>digo.
|
||||
</para>
|
||||
<example>
|
||||
<title>Plugin prefilter</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: prefilter.pre01.php
|
||||
* Type: prefilter
|
||||
* Name: pre01
|
||||
* Purpose: Convert html tags to be lowercase.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_prefilter_pre01($source, &$smarty)
|
||||
{
|
||||
return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
<para></para>
|
||||
<example>
|
||||
<title>Plugin postfilter</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: postfilter.post01.php
|
||||
* Type: postfilter
|
||||
* Name: post01
|
||||
* Purpose: Output code that lists all current template vars.
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_postfilter_post01($compiled, &$smarty)
|
||||
{
|
||||
$compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled;
|
||||
return $compiled;
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.outputfilters"><title>Filtros de sa<73>da</title>
|
||||
<para>
|
||||
Filtros de sa<73>da operam na sa<73>da do template, depois que o template <20> lido e executado, mas
|
||||
antes a sa<73>da <20> mostrada.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>smarty_outputfilter_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>string <parameter>$template_output</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
O primeiro par<61>metro para a fun<75><6E>o do filtro de sa<73>da <20> a sa<73>da do template que precisa ser processada, e
|
||||
o segundo par<61>metro <20> a inst<73>ncia da Smarty invocando o plugin.
|
||||
O plugin deve fazer o precessamento e
|
||||
retornar os resultados.
|
||||
</para>
|
||||
<example>
|
||||
<title>output filter plugin</title>
|
||||
<programlisting>
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: outputfilter.protect_email.php
|
||||
* Type: outputfilter
|
||||
* Name: protect_email
|
||||
* Purpose: Converts @ sign in email addresses to %40 as
|
||||
* a simple protection against spambots
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_outputfilter_protect_email($output, &$smarty)
|
||||
{
|
||||
return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
|
||||
'$1%40$2', $output);
|
||||
}
|
||||
</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.resources"><title>Recursos (Resources)</title>
|
||||
<para>
|
||||
Os plugins de Recursos s<>o como uma forma gen<65>rica de fornecer c<>digos fontes de template
|
||||
ou componentes de script PHP para a Smarty. Alguns exemplos de recursos:
|
||||
banco de dados, LDAP, mem<65>ria compartilhada, sockets, e assim por diante.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
H<> um total de 4 fun<75><6E>es que precisam estar registradas
|
||||
para cada tipo de recurso. Cada fun<75><6E>o receber<65>
|
||||
o recurso requisitado como o primeiro par<61>metro e o objeto da Smarty como o <20>ltimo par<61>metro. O resto
|
||||
dos par<61>metros dependem da fun<75><6E>o.
|
||||
</para>
|
||||
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_source</function></funcdef>
|
||||
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
||||
<paramdef>string <parameter>&$source</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_timestamp</function></funcdef>
|
||||
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
||||
<paramdef>int <parameter>&$timestamp</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_secure</function></funcdef>
|
||||
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_trusted</function></funcdef>
|
||||
<paramdef>string <parameter>$rsrc_name</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
|
||||
<para>
|
||||
A primeira fun<75><6E>o deve devolver o recurso. Seu segundo par<61>metro <20> uma vari<72>vel passada por
|
||||
refer<65>ncia onde o resultado seria armazenado.
|
||||
A fun<75><6E>o deve retornar <literal>true</literal> se
|
||||
ela est<73> apta a devolver com sucesso o recurso e
|
||||
caso contr<74>rio retorna <literal>false</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A segunda fun<75><6E>o deve devolver a <20>ltima modifica<63><61>o do
|
||||
recurso requisitado (como um timestamp Unix).
|
||||
O segundo par<61>metro <20> uma vari<72>vel passada por refer<65>ncia onde o timestamp seria armazenado.
|
||||
A fun<75><6E>o deve retornar <literal>true</literal>
|
||||
se o timestamp poderia ser determinado com sucesso,
|
||||
e caso contr<74>rio retornaria <literal>false</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A terceira fun<75><6E>o deve retornar <literal>true</literal> ou
|
||||
<literal>false</literal>, dependendo do recurso requisitado
|
||||
est<73> seguro ou n<>o. Esta fun<75><6E>o <20> usada
|
||||
apenas para recursos de template mas ainda assim seria definida.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A quarta fun<75><6E>o deve retornar <literal>true</literal>
|
||||
ou <literal>false</literal>, dependendo
|
||||
do recurso requisitado ser confi<66>vel ou n<>o.
|
||||
Esta fun<75><6E>o <20> usada apenas para componentes de
|
||||
script PHP requisitados pelas tags <command>include_php</command> ou
|
||||
<command>insert</command> com o atributo <structfield>src</structfield>.
|
||||
Entretanto, ela ainda assim mesmo seria definida para os recursos de template.
|
||||
</para>
|
||||
<para>
|
||||
Veja tamb<6D>m:
|
||||
<link linkend="api.register.resource">register_resource()</link>,
|
||||
<link linkend="api.unregister.resource">unregister_resource()</link>.
|
||||
</para>
|
||||
<example>
|
||||
<title>Plugin resource (recurso)</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: resource.db.php
|
||||
* Type: resource
|
||||
* Name: db
|
||||
* Purpose: Fetches templates from a database
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
|
||||
{
|
||||
// do database call here to fetch your template,
|
||||
// populating $tpl_source
|
||||
$sql = new SQL;
|
||||
$sql->query("select tpl_source
|
||||
from my_table
|
||||
where tpl_name='$tpl_name'");
|
||||
if ($sql->num_rows) {
|
||||
$tpl_source = $sql->record['tpl_source'];
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
|
||||
{
|
||||
// faz o banco de dados chamar aqui para preencher $tpl_timestamp.
|
||||
$sql = new SQL;
|
||||
$sql->query("select tpl_timestamp
|
||||
from my_table
|
||||
where tpl_name='$tpl_name'");
|
||||
if ($sql->num_rows) {
|
||||
$tpl_timestamp = $sql->record['tpl_timestamp'];
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function smarty_resource_db_secure($tpl_name, &$smarty)
|
||||
{
|
||||
// assume que todos os templates s<>o seguros
|
||||
return true;
|
||||
}
|
||||
|
||||
function smarty_resource_db_trusted($tpl_name, &$smarty)
|
||||
{
|
||||
// n<>o usado para templates
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="plugins.inserts"><title>Inserts</title>
|
||||
<para>
|
||||
Plugins Insert s<>o usados para implementar fun<75><6E>es que s<>o invocadas por tags
|
||||
<link linkend="language.function.insert"><command>insert</command></link>
|
||||
no template.
|
||||
</para>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>smarty_insert_<replaceable>name</replaceable></function></funcdef>
|
||||
<paramdef>array <parameter>$params</parameter></paramdef>
|
||||
<paramdef>object <parameter>&$smarty</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
O primeiro par<61>metro para a fun<75><6E>o <20> um array
|
||||
associativo de atributos passados para o
|
||||
insert. Ou acessa esses valores diretamente,
|
||||
i.e. <varname>$params['start']</varname> ou usa
|
||||
<varname>extract($params)</varname> para import<72>-los para dentro da tabela s<>mbolo.
|
||||
</para>
|
||||
<para>
|
||||
A fun<75><6E>o insert deve retornar o
|
||||
resultado que ser<65> substitu<74>do no lugar da tag
|
||||
<command>insert</command> no template.
|
||||
</para>
|
||||
<example>
|
||||
<title>Plugin insert</title>
|
||||
<programlisting>
|
||||
<?php
|
||||
/*
|
||||
* Smarty plugin
|
||||
* -------------------------------------------------------------
|
||||
* File: insert.time.php
|
||||
* Type: time
|
||||
* Name: time
|
||||
* Purpose: Inserts current date/time according to format
|
||||
* -------------------------------------------------------------
|
||||
*/
|
||||
function smarty_insert_time($params, &$smarty)
|
||||
{
|
||||
if (empty($params['format'])) {
|
||||
$smarty->trigger_error("insert time: missing 'format' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
$datetime = strftime($params['format']);
|
||||
return $datetime;
|
||||
}
|
||||
?></programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
44
docs/pt_BR/programmers/smarty-constants.xml
Normal file
44
docs/pt_BR/programmers/smarty-constants.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision$ -->
|
||||
<chapter id="smarty.constants">
|
||||
<title>Constantes</title>
|
||||
<para></para>
|
||||
|
||||
<sect1 id="constant.smarty.dir">
|
||||
<title>SMARTY_DIR</title>
|
||||
<para>
|
||||
Isso deve ser o caminho completo do path para a localiza<7A><61>o dos arquivos de classe da Smarty.
|
||||
Se isso n<>o for definido, ent<6E>o a Smarty ir<69> tentar determinar
|
||||
o valor apropriado automaticamente. Se definido, o path
|
||||
deve finalizar com uma barra.
|
||||
</para>
|
||||
<example>
|
||||
<title>SMARTY_DIR</title>
|
||||
<programlisting>
|
||||
// set path to Smarty directory
|
||||
define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
|
||||
|
||||
require_once(SMARTY_DIR."Smarty.class.php");</programlisting>
|
||||
</example>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode: sgml
|
||||
sgml-omittag:t
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
indent-tabs-mode:nil
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"../../../../manual.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:nil
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||||
vim: et tw=78 syn=sgml
|
||||
vi: ts=1 sw=1
|
||||
-->
|
Reference in New Issue
Block a user