Professional Documents
Culture Documents
por
Monte Ohrt <monte at ohrt dot com> e Andrei Zmievski <andrei@php.net>
Publicado 31-03-2005
Copyright 2001-2005 New Digital Group, Inc.
ndice
Prefcio ............................................................................................................................................. vii
I. Iniciando .......................................................................................................................................... 1
1. O que o Smarty? ...................................................................................................................... 2
2. Instalao ................................................................................................................................. 4
Requisitos ............................................................................................................................ 4
Instalao Bsica .................................................................................................................. 4
Estendendo a configurao ...................................................................................................... 7
II. Smarty para Designers de Template ...................................................................................................... 9
3. Sintaxe Bsica ......................................................................................................................... 11
Comentrios ....................................................................................................................... 11
Funes ............................................................................................................................. 11
Atributos ........................................................................................................................... 12
Colocando Variveis em Aspas Duplas ................................................................................... 12
Matemtica ........................................................................................................................ 13
Escaping Smarty Parsing ...................................................................................................... 13
4. Variveis ................................................................................................................................ 15
Variveis definidas do PHP ................................................................................................... 15
Variveis carregadas de arquivos de configurao ..................................................................... 17
A varivel reservada {$smarty} ............................................................................................. 18
5. Modificadores de variveis ........................................................................................................ 20
capitalize ........................................................................................................................... 21
count_characters ................................................................................................................. 21
cat .................................................................................................................................... 22
count_paragraphs ................................................................................................................ 22
count_sentences .................................................................................................................. 23
count_words ...................................................................................................................... 23
date_format ........................................................................................................................ 23
default .............................................................................................................................. 25
escape ............................................................................................................................... 26
indent ............................................................................................................................... 27
lower ................................................................................................................................ 27
nl2br ................................................................................................................................. 28
regex_replace ..................................................................................................................... 28
replace .............................................................................................................................. 29
spacify .............................................................................................................................. 29
string_format ...................................................................................................................... 30
strip .................................................................................................................................. 30
strip_tags ........................................................................................................................... 31
truncate ............................................................................................................................. 31
upper ................................................................................................................................ 32
wordwrap .......................................................................................................................... 33
6. Combinando Modificadores ....................................................................................................... 34
7. Funes internas ...................................................................................................................... 35
capture .............................................................................................................................. 35
config_load ........................................................................................................................ 36
foreach,foreachelse .............................................................................................................. 37
include .............................................................................................................................. 39
include_php ....................................................................................................................... 40
insert ................................................................................................................................ 41
if,elseif,else ........................................................................................................................ 42
ldelim,rdelim ...................................................................................................................... 43
literal ................................................................................................................................ 44
php ................................................................................................................................... 44
iii
45
52
54
54
54
55
56
56
57
58
59
60
62
63
66
69
71
72
73
73
77
80
81
82
84
84
85
85
85
86
86
86
86
86
86
86
87
87
87
87
87
88
88
88
88
88
88
88
88
89
89
89
89
90
90
90
90
90
vi
Prefcio
Esta sem dvida uma das perguntas mais freqentes nas listas de discusses sobre PHP: como eu fao meus scripts em
PHP independentes do layout? O PHP vendido como sendo uma "linguagem de script embutida no HTML", aps escrever
alguns projetos que misturam HTML e PHP naturalmente vem uma idia de que a separao da forma e contedo uma boa
prtica [TM]. Alm disso, em muitas empresas os papis de designer e programador so separados. Conseqentemente, a
busca por um sistema de templates continua.
Na nossa empresa por exemplo, o desenvolvimento de uma aplicao feito da seguinte maneira: Aps a documentao necessria estar pronta, o designer faz o esboo da interface e entrega ao programador. O programador implementa as regras
de negcio no PHP e usa o esboo da interface para criar o esqueleto dos templates. O projeto ento est nas mos da pessoa
responsvel pelo layout HTML da pgina que ento transforma o esboo em um layout realmente funcional. O projeto talvez v e volte entre programao/designer HTML vrias vezes. Porm, importante ter um bom suporte templates porque
os programadores no querem ter que ficar mexendo com HTML e no querem que os designers estraguem seus cdigos
PHP. Os designers precisam de ajuda para alterar os arquivos de configurao, blocos dinmicos e outros problemas relacionados interface usada, mas eles no querem ocupar-se com as complexidades da linguagem de programao PHP.
Analisando muitas das solues de templates disponveis para PHP hoje em dia, a maioria somente disponibilizada uma forma rudimentar de substituio de variveis dentro dos templates e trabalham de forma limitada com as funcionalidades dos
blocos dinmicos. Mas nossas necessidades necessitam de um pouco mais do que isso. Ns no queramos que programadores mexendo com layout em HTML, mas isso praticamente inevitvel. Por exemplo, se um designer quiser que as cores de
fundo se alternam em blocos dinmicos, isso tem que ser feito pelo programador antecipadamente. Ns tambm precisamos
que os designers possam usar seus prprios arquivos de configurao, e usar as variveis definidas nestes arquivos em seus
templates. E a lista de necessidades continua...
Ns comeamos escrever as especificaes para um sistema de templates por volta de 1999. Aps o trmino das especificaes, ns comeamos a escrever um sistema de template em C que espervamos ser aceito para rodar com o PHP. No s
esbarramos em muitas barreiras tcnicas, como tambm houve um enorme debate sobre o que exatamente um sistema de
template deveria ou no fazer. partir desta experincia, ns decidimos que o sistema de template fosse escrito para ser
uma classe do PHP, para que qualquer um usa-se da forma que lhe fosse mais conveniente, ento ns escrevemos um sistema que fazia exatamente, foi a que surgiu o SmartTemplate (obs: esta classe nunca foi enviada ao pblico). Foi uma classe que fez quase tudo que ns queramos: substituio de variveis, suporte incluso de outros templates, integrao com
arquivos de configurao, cdigo PHP embutido, funcionalidades 'if' limitada e blocos dinmicos muito mais robustos que
poderiam ser aninhados muitas vezes. Foi tudo feito usando expresses reguladores e cdigos confusos, como diramos, impenetrvel. Era um sistema tambm extremamente lento em grandes aplicativos por causa de todo o trabalho que era feito
pelas expresses regulares e o 'parsing'(interpretao) em cada chamada ao aplicativo. O maior problema do ponto de vista
de um programador foi o espantoso trabalho que era necessrio para configurar e processar os blocos dinmicos dos templates. Como faramos esse sistema ser simples de usar?
Foi ento que veio a viso do que hoje conhecido como Smarty. Ns sabemos o quo rpido um cdigo PHP sem o sobrecarregamento de um sistema de templates. Ns tambm sabemos quo meticuloso e assustador a linguagem PHP aos
olhos de um designer atual, e isso tudo poderia ser mascarado usando uma sintaxe simples nos templates. Ento o que acontece se ns combinarmos essas duas foras? Assim, nasceu o Smarty...
vii
viii
Parte I. Iniciando
ndice
1. O que o Smarty? .............................................................................................................................. 2
2. Instalao ......................................................................................................................................... 4
Requisitos ............................................................................................................................ 4
Instalao Bsica .................................................................................................................. 4
Estendendo a configurao ...................................................................................................... 7
Ele eficiente visto que o interpretador do PHP faz o trabalho mais pesado.
Ele est atento para s recompilar os arquivos de template que foram mudados.
Voc pode criar funes customizadas e modificadores de variveis customizados, de modo que a linguagem de template extremamente extensvel.
Delimitadores de tag configurveis, sendo assim voc pode usar {}, {{}}, <!--{}-->, etc.
Os construtoress if/elseif/else/endif so passados para o interpretador de PHP, assim a sintaxe de expresso {if ...} pode
ser tanto simples quanto complexa da forma que voc queira.
possvel embutir o cdigo PHP diretamente em seus arquivos de template, apesar de que isto pode no ser necessrio
(no recomendado) visto que a ferramenta to customizvel.
O que o Smarty?
Arquitetura de Plugin
Captulo 2. Instalao
ndice
Requisitos ............................................................................................................................................ 4
Instalao Bsica .................................................................................................................................. 4
Estendendo a configurao ...................................................................................................................... 7
Requisitos
Smarty requer um servidor web rodando o PHP 4.0.6 superior.
Instalao Bsica
Instale os arquivos da biblioteca do Smarty que esto no diretrio /libs/ da distribuio. Estes so os arquivos PHP que voc
NO PRECISA editar. Eles so comuns a todas as aplicaes e eles s so atualizados quando voc atualiza para uma nova
verso do Smarty.
O Smarty utiliza uma constante do PHP chamada SMARTY_DIR que o caminho para diretrio da biblioteca do Smarty.
Basicamente, se sua aplicao pode encontrar o arquivo Smarty.class.php, voc no precisa definir a constante
SMARTY_DIR, o Smarty ir localiz-la sozinho. Sendo assim, se o arquivo Smarty.class.php no est em seu include_path,
ou voc no fornece um caminho absoluto para ele em sua aplicao, ento voc deve definir a constante SMARTY_DIR
manualmente. A constante SMARTY_DIR deve conter uma barra de seguimento.
Aqui est um exemplo de como voc cria uma instncia do Smarty em seus scripts PHP:
Tente rodar o script acima. Se voc obtiver um erro dizendo que o arquivo Smarty.class.php no pde ser encontrado, voc
tem que fazer uma das coisas a seguir:
Instalao
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;
Agora que os arquivos da biblioteca esto no lugar, chegou a hora de configurar os diretrios do Smarty para a sua aplicao. O Smarty requer quatro diretrios que so (por definio) chamados de templates, templates_c, configs e cache. Cada
um destes so definveis pelas propriedades da classe do Smarty $template_dir, $compile_dir, $config_dir, e $cache_dir
respectivamente. altamente recomendado que voc configure um grupo separado destes diretrios para cada aplicao que
utilizar o Smarty.
Certifique-se que voc sabe a localizao do 'document root' do seu servidor web. Em nosso exemplo, o 'document root' "/
web/www.mydomain.com/docs/". Os diretrios do Smarty s so acessados pela biblioteca do Smarty e nunca acessados diretamente pelo navegador. Ento para evitar qualquer preocupao com segurana, recomendado colocar estes diretrios
fora do document root.
Para o nosso exemplo de instalao, ns estaremos configurando o ambiente do Smarty para uma aplicao de livro de visitas. Ns escolhemos uma aplicao s para o propsito de uma conveno de nomeao de diretrio. Voc pode usar o mesmo ambiente para qualquer aplicao, apenas substitua "guestbook" com o nome de sua aplicao. Ns colocaremos nossos
diretrios do Smarty dentro de "/web/www.mydomain.com/smarty/guestbook/".
Voc precisar pelo menos de um arquivo dentro de seu 'document root', e que seja acessado pelo navegador. Ns chamamos nosso script de "index.php", e o colocamos em um subdiretrio dentro do 'document root' chamado "/guestbook/".
Nota Tcnica: conveniente configurar o servidor de forma que "index.php" possa ser identificado como o ndice
de diretrio padro, desta forma se voc acessa "http://www.mydomain.com/guestbook/", o script index.php ser
executado sem "index.php" na URL. No Apache voc pode definir isto adicionando "index.php" no final de sua
configurao DirectoryIndex (separe cada entrada com um espao.)
Vamos dar uma olhada na estrutura de arquivos at agora:
Instalao
/web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/
/web/www.mydomain.com/docs/guestbook/index.php
O Smarty precisar escrever para o $compile_dir e $cache_dir, ento garanta que o usurio do servidor web possa escrever
neles. Este geralmente o usurio "nobody" e o grupo "nobody" (ningum). Para SO com X usurios, o usurio padro
"www" e o grupo "www". Se voc est usando Apache, voc pode olhar em seu arquivo httpd.conf (normalmente em "/
usr/local/apache/conf/") para ver qual o usurio e grupo esto sendo usados.
Nota Tcnica: chmod 770 ser a segurana correta suficientemente restrita, s permite ao usurio "nobody" e o
grupo "nobody" acesso de leitura/escrita aos diretrios. Se voc gostaria de abrir o acesso de leitura para qualquer
um (na maioria das vezes para sua prpria convenincia de querer ver estes arquivos), voc pode usar o 775 ao invs do 770.
Ns precisamos criar o arquivo index.tpl que o Smarty vai ler. Ele estar localizado em seu $template_dir.
Nota Tcnica: {* Smarty *} um comentrio de template. Ele no exigido, mas uma prtica boa iniciar todos
os seus arquivos de template com este com este comentrio. Isto faz com que o arquivo seja reconhecido sem levar
em considerao a sua extenso. Por exemplo, editores de texto poderiam reconhecer o arquivo e habilitar colorao de sintaxe especial.
Agora vamos editar index.php. Ns criaremos uma instncia do Smarty, atribuiremos valores s variveis de template e
mostraremos o arquivo index.tpl. Em nosso ambiente de exemplo, "/usr/local/lib/php/Smarty" o nosso include_path. Certifique-se de ter feito o mesmo, ou use caminhos absolutos.
Instalao
$smarty->assign('nome','Thomas');
$smarty->display('index.tpl');
Nota Tcnica: Em nosso exemplo, ns estamos configurando caminhos absolutos para todos os diretrios do
Smarty. Se '/web/www.mydomain.com/smarty/guestbook/' est dentro de seu include_path do PHP, ento estas
configuraes no so necessrias. Entretanto, isto mais eficiente e (a experincia mostra) menos tendncia a erros em relao definio de caminhos absolutos. Isto garante que o Smarty est obtendo os arquivos dos diretrios que voc deseja.
Agora carregue o arquivo index.php em seu navegador. Voc veria "Ol, Thomas!"
Voc completou a configurao bsica para o Smarty!
Estendendo a configurao
Esta uma continuao da instalao bsica, por favor leia a instalao bsica primeiro!
Uma forma um pouco mais flexvel de configurar o Smarty estender a classe e inicializar seu ambiente de Smarty. Ento,
ao invs de configurar caminhos de diretrios repetidamente, preencher as mesmas variveis, etc., ns podemos fazer isso
para facilitar. Vamos criar um novo diretrio "/php/includes/guestbook/" e criar um novo arquivo chamado "setup.php". Em
nosso ambiente de exemplo, "/php/includes" est em nosso include_path. Certifique-se de que voc tambm definiu isto, ou
use caminhos de arquivos absolutos.
Instalao
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('nome','Thomas');
$smarty->display('index.tpl');
Agora voc pode ver que extremamente simples criar uma instncia do Smarty, apenas use Smarty_GuestBook que automaticamente inicializa tudo para a nossa aplicao.
11
11
11
12
12
13
13
15
15
17
18
20
21
21
22
22
23
23
23
25
26
27
27
28
28
29
29
30
30
31
31
32
33
34
35
35
36
37
39
40
41
42
43
44
44
45
strip ..................................................................................................................................
8. Funes Personalizadas .....................................................................................................................
assign ...............................................................................................................................
counter ..............................................................................................................................
cycle .................................................................................................................................
debug ................................................................................................................................
eval ..................................................................................................................................
fetch .................................................................................................................................
html_checkboxes ................................................................................................................
html_image ........................................................................................................................
html_options ......................................................................................................................
html_radios ........................................................................................................................
html_select_date .................................................................................................................
html_select_time .................................................................................................................
html_table .........................................................................................................................
math .................................................................................................................................
mailto ...............................................................................................................................
popup_init .........................................................................................................................
popup ...............................................................................................................................
textformat ..........................................................................................................................
9. Arquivos de Configurao .................................................................................................................
10. Debugging Console ........................................................................................................................
10
52
54
54
54
55
56
56
57
58
59
60
62
63
66
69
71
72
73
73
77
80
81
11
11
12
12
13
13
Todas as tags de template do Smarty contm delimitadores. Por padro, estes delimitadores so { e }, mas eles podem ser
alterados.
Para os exemplos seguir, ns assumiremos que voc est usando os delimitadores padro. Para o Smarty, todo o contedo
fora dos delimitadores mostrado como contedo esttico, ou inaltervel. Quando o Smarty encontra tags de template, ele
tenta interpret-las, e ento mostra a sada apropriada em seu lugar.
Comentrios
Os comentrios do template ficam entre asteriscos dentro de delimitadores, exemplo: {* este um comentrio *}. Comentrios do Smarty no so exibidos no resultado final do template. Eles so usados para fazer anotaes internas nos templates.
Funes
Cada tag Smarty mostra uma varivel ou utiliza algum tipo de funo. Funes so processadas e exibidas colocando-se a
funo e seus atributos entre delimitadores, exemplo: {funcname attr1="val" attr2="val"}.
11
Sintaxe Bsica
{if $enfase_nome}
Seja bem-vindo, <font color="{#corFonte#}">{$nome}!</font>
{else}
Seja bem-vindo, {$nome}!
{/if}
{include file="rodape.tpl"}
Ambas as funes internas e as funes personalizadas tem a mesma sintaxe nos templates. Funes internas so o funcionamento do Smarty, tais como if, section e strip. Elas no podem ser modificadas. Funes personalizadas so funes adicionais implementadas por modo de plugins. Elas podem ser modificadas como voc quiser, ou voc pode adionar novas.
html_options e html_select_date so exemplos de funes personalizadas.
Atributos
A maioria das funes contm atributos que especificam ou modificam o seu comportamento. Atributos para funes do
Smarty so muito parecidos com atributos da HTML. Valores estticos no precisam ficar entre aspas, mas recomenda-se
usar aspas para strings literais. Variveis tambm podem ser usadas, e no precisam estar entre aspas.
Alguns atributos exigem valores booleanos (verdadeiro ou falso). Estes valores podem ser especificados sem aspas true,
on, e yes, ou false, off, e no.
<-<-<-<-<-<--
mostra
mostra
mostra
mostra
mostra
mostra
$foo
$foo_bar
$foo[0]
$foo[bar]
$foo (e no $foo.bar)
$foo.bar
EXEMPLOS PRTICOS:
{include file="subdir/$tpl_name.tpl"} <-- substitui $tpl_name pelo seu valor
12
Sintaxe Bsica
Matemtica
Matemtica pode ser aplicada diretamente aos valores de variveis.
13
Sintaxe Bsica
dosomething();
</script>
14
Captulo 4. Variveis
ndice
Variveis definidas do PHP ................................................................................................................... 15
Variveis carregadas de arquivos de configurao ..................................................................................... 17
A varivel reservada {$smarty} ............................................................................................................. 18
No Smarty h vrios tipos diferentes de variveis. O tipo da varivel depende do prefixo que ela usa (ou do smbolo pelo
qual ela est contida).
Variveis no Smarty podem tanto serem exibidas diretamente ou usadas como argumentos para atributos de funes e modificadores, dentro de expresses condicionais, etc. Para que uma varivel seja exibida o nome dela deve estar dentro dos delimitadores e no pode conter nenhum outro caracter. Veja os exemplos abaixo:
{$Nome}
{$Contatos[row].Telefone}
<body bgcolor="{#cordefundo#}">
Associative arrays
Voc tambm pode referenciar matrizes associativas que so definidas no PHP especificando a chave depois do smbolo '.'
(ponto).
15
Variveis
ndices de Matrizes
Voc pode referencia matrizes pelo seu ndice, muito parecido com a sintaxe nativa do PHP.
Objetos
Propriedades de objetos definidos do PHP podem ser referenciados especificando-se o nome da propriedade depois do smbolo '->'.
16
Variveis
name: {$person->name}<br>
email: {$person->email}<br>
MOSTRA:
name: Zaphod Beeblebrox<br>
email: zaphod@slartibartfast.com<br>
17
Variveis
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
Variveis de um arquivo de configurao no podem ser usadas at que sejam carregadas de um arquivo de configurao.
Este procedimento explicado posteriormente neste documento em config_load.
Variveis Request
Variveis request como get, post, cookies, server, environment, e session podem ser acessadas como mostrado nos exemplos abaixo:
{$smarty.now}
O timestamp atual pode ser acessado com {$smarty.now}. O nmero reflete o nmero 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.
18
Variveis
{$smarty.const}
Voc pode acessar o valor de constantes PHP diretamente.
{$smarty.capture}
A sada capturada via {capture}..{/capture} pode ser acessada usando a varivel {$smarty}. Veja a a seo sobre capture
para um exemplo.
{$smarty.config}
A varivel {$smarty} pode ser usada para referir variveis de configurao carregadas. {$smarty.config.foo} um sinonimo
para {#foo#}. Veja a seo sobre config_load para um exemplo.
{$smarty.section}, {$smarty.foreach}
A varivel {$smarty} pode ser usada para se referir a propriedades 'section' e 'foreach' de loop. Veja a documentao sobre
section e foreach.
{$smarty.template}
Esta varivel contm o nome do template atual que esta sendo processado.
{$smarty.ldelim}
This variable is used for printing the left-delimiter value literally. See also {ldelim},{rdelim}.
{$smarty.rdelim}
This variable is used for printing the right-delimiter value literally. See also {rdelim},{rdelim}.
19
21
21
22
22
23
23
23
25
26
27
27
28
28
29
29
30
30
31
31
32
33
Modificadores de variveis podem ser aplicados a variveis, funes personalizadas ou strings. Para aplicar um modificador, especifique o valor seguido por |(pipe) e o nome do modificador. Um modificador aceita parmetros adicionais que
afetam o seu comportamento. Estes parmetros vem aps o nome do modificador e so separados por : (dois pontos).
Se voc aplicar um modificador uma matriz ao invs de aplicar ao valor de uma varivel, o modificador vai ser aplicado
cada valor da matriz especificada. Se voc quer que o modificador use a matriz inteira como um valor, voc deve colocar o
smbolo @ antes do nome do modificador, como a seguir: {$tituloArtigo|@count} (isto ir mostrar o nmero de elementos na matriz $tituloArtigo).
Modificadores podem ser carregados automaticamente partir do seu $plugins_dir (veja: Nomes sugeridos) ou podem ser
registrados explicitamente (veja: register_modifier). Adicionalmente, todas as funes php podem ser utiliadas como modi20
Modificadores de variveis
ficadores implicitamente. (O exemplo do @count acima usa a funo count do php e no um modificador do Smarty). Usar
funes do php como modificadores tem dois pequenos problemas: Primeiro: s vezes a ordem dos parmetros da funo
no a desejada ({"%2.f"|sprintf:$float} atualmente funciona, mas o melhor seria algo mais intuitivo. Por exemplo:
{$float|string_format:"%2.f"} que disponibilizado na distribuio do Smarty). Segundo: com a varivel $security
ativada em todas as funes do php que so usadas como modificadores precisam ser declaradas como confiveis (trusted)
na matriz $security_settings['MODIFIER_FUNCS'].
capitalize
Isto usado para converter para maisculas a primeira letra de todas as palavras em uma varivel.
count_characters
Posio do Parmetro
Tipo
Requerido
Padro
boolean
No
false
21
Descrio
Isto determina quando
incluir ou no os espaos em branco na contagem.
Modificadores de variveis
32
cat
Posio do Parmetro
Tipo
Requerido
cat
string
No
empty
Descrio
Este o valor para concatenar com a varivel
dada.
count_paragraphs
Isto usado para contar o nmero de paragrafos em uma varivel.
22
Modificadores de variveis
count_sentences
Isto usado para contar o nmero de sentenas em uma varivel.
count_words
Isto usado para contar o nmero de palavras em uma varivel.
date_format
Posio do Parmetro
Tipo
Requerido
Padro
Descrio
string
No
%b %e, %Y
string
No
n/a
Isto formata a data e hora no formato strftime() indicado. Datas podem ser passadas para o Smarty como timestamps unix,
23
Modificadores de variveis
timestamps mysql, ou qualquer string composta de ms dia ano(interpretavel por strtotime). Designers podem ento usar date_format para ter um controle completo da formatao da data. Se a data passada para date_format estiver vazia e um segundo parmetro for passado, este ser usado como a data para formatar.
24
Modificadores de variveis
%k - hora (relgio de 24 horas) digtos nicos so precedidos por um espao em branco (intervalo de 0 a
%l - hora como um nmero decimal usando um relgio de 12 horas, digtos unicos so precedidos
por um espao em branco (intervalo de 1 a 12)
%m - ms como nmero decimal (intervalo de 01 a 12)
%M - minuto como um nmero decimal
%n - caractere de nova linha
%p - ou `am' ou `pm' de acordo com o valor de hora dado, ou as strings correspondentes ao local atual
%r - hora na notao a.m. e p.m.
%R - hora na notao de 24 horas
%S - segundo como nmero decimal
%t - caractere tab
%T - hora atual, igual a %H:%M:%S
%u - dia da semana como um nmero decimal [1,7], com 1 representando segunda-feira
%U - nmero da semana do ano atual como um nmero decimal, comeando com o primeiro domingo como primei
%V - nmero da semana do ano atual como um nmero decimal de acordo com The ISO 8601:1988,
intervalo de 01 a 53, aonde a semana 1 a primeira semana que tenha pelo menos quatro dias no ano atua
%w - dia da semana como decimal, domingo sendo 0
%W - nmero da semana do ano atual como nmero decimal, comeando com a primeira segunda como primeiro
%x - representao preferencial da data para o local atualsem a hora
%X - representao preferencial da hora para o local atual sem a data
%y - ano como nmero decimal sem o sculo (intervalo de 00 a 99)
%Y - ano como nmero decimal incluindo o sculo
%Z - zona horria ou nome ou abreviao
%% - um caractere `%'
NOTA PARA PROGRAMADORES: date_format essencialmente um wrapper para a funo strftime() do PHP.
Voc dever ter mais ou menos especificadores de converso disponveis de acordo com a
funo strftime() do sistema operacional aonde o PHP foi compilado. De uma olhada
na pgina de manual do seu sistema para uma lista completa dos especificadores vlidos.
default
Posio do Parmetro
Tipo
Requerido
Padro
string
No
vazio
Descrio
Este o valor padro
para mostrar se a varivel estiver vazia.
Isto usado para definir um valor padro para uma varivel. Se a varivel estiver vazia ou no for definida, o valor padro
dado mostrado. Default usa um argumento.
25
Modificadores de variveis
escape
Posio do Parmetro
Tipo
Requerido
Valores Possveis
Padro
string
No
html,htmlall,url,qu
otes,hex,hexentity,j
avascript
html
Descrio
Este o formato de
escape para usar.
Este usado para escapar html, url, aspas simples em uma varivel que j no esteja escapada, escapar hex, hexentity ou javascript. Por padro, escapado o html da varivel.
26
Modificadores de variveis
indent
Posio do Parmetro
Tipo
Requerido
Padro
Descrio
integer
No
string
No
(um espao)
Isto endenta uma string em cada linha, o padro 4. Como parmetro opcional, voc pode especificar o nmero de caracteres para endentar. Como segundo parmetro opcional, voc pode especificar o caractere usado para endentar. (Use "\t" para
tabs.)
lower
Isto usado para converter para minsculas uma varivel.
27
Modificadores de variveis
nl2br
Todas as quebras de linha sero convertidas para <br /> na varivel data. Isto equivalente a funo nl2br() do PHP.
regex_replace
Posio do Parmetro
Tipo
Requerido
Padro
string
Sim
n/a
Descrio
Esta a expresso regular a ser substituda.
string
Sim
n/a
Uma expresso regular para localizar e substituir na varivel. Use a sintaxe para preg_replace() do manual do PHP.
28
Modificadores de variveis
{* replace each carriage return, tab & new line with a space *}
{$articleTitle}
{$articleTitle|regex_replace:"/[\r\t\n]/":" "}
MOSTRA:
Infertility unlikely to
be passed on, experts say.
Infertility unlikely to be passed on, experts say.
replace
Posio do Parmetro
Tipo
Requerido
Padro
Descrio
string
Sim
n/a
string
Sim
n/a
Garden.
spacify
Posio do Parmetro
Tipo
Requerido
Padro
string
No
um espao
Descrio
O que inserido entre
cada caractere da varivel.
Insere um espao entre cada caractere de uma varivel. Voc pode opcionalmente passar um caractere (ou uma string) diferente para inserir.
29
Modificadores de variveis
string_format
Posio do parmetro
Tipo
Requerido
Padro
string
Sim
n/a
Descrio
Este o formato para
ser usado. (sprintf)
Este um meio para formatar strings, como nmeros decimais e outros. Use a sintaxe para sprintf para a formatao.
strip
Isto substitui todos os espaos repetidos, novas linhas e tabs por um nico espao ou a string indicada.
Nota: Se voc quer substituir blocos de texto do template, use a funo strip.
30
Modificadores de variveis
hole in one.");
index.tpl:
{$articleTitle}
{$articleTitle|strip}
{$articleTitle|strip:" "}
MOSTRA:
Grandmother of
eight makes
hole in one.
Grandmother of eight makes hole in one.
Grandmother of eight makes hole in one.
strip_tags
Isto retira as tags de marcao, basicamente tudo entre < e >.
truncate
Posio do Parmetro
Tipo
Requerido
Padro
integer
No
80
string
No
...
boolean
No
false
31
Descrio
Modificadores de variveis
Posio do Parmetro
Tipo
Requerido
Padro
Descrio
(true).
Isto trunca a varivel para uma quantidade de caracteres, o padro 80. Como segundo parmetro opcional, voc pode especificar uma string para mostrar ao final se a varivel foi truncada. Os caracteres da string so includos no tamanho original
para a truncagem. por padro, truncate ir tentar cortar ao final de uma palavra. Se voc quizer cortar na quantidade exata de
caracteres, passe o terceiro parmetro, que opcional, como true.
Sisters
Sisters
Sisters
Sisters
Sisters
Sisters
Sisters
Reunite
Reunite
Reunite
Reunite
Reunite
Reunite
Reunite
upper
Isto usado para converter para maisculas uma varivel.
32
Modificadores de variveis
wordwrap
Posio do Parmetro
Tipo
Requerido
Padro
Descrio
integer
No
80
Isto determina em
quantas colunas quebrar.
string
No
\n
boolean
No
false
Isto quebra uma string para uma largura de coluna, o padro 80. Como segundo parmetro opcional, voc pode especificar
a string que ser usada para quebrar o texto para a prxima linha (o padro um retorno de carro \n). Por padro, wordwrap
ir tentar quebrar ao final de uma palavra. Se voc quiser quebrar no tamanho exato de caracteres, passe o terceiro parmetro, que opcional, como true.
33
are
E R
e r
e r
e r
Productive,
S
A R E
s
a r e
s
a r e
s
a r e
but Death
P R O D U
p r o d u
p r o d u
p. . .
Cuts Efficiency.
C T I V E ,
B U T
D E A T H
c t i v e ,
b u t
d e a t h
c t i v e ,
b u t . . .
34
C U T S
E F F I C I E N C Y .
c u t s...
35
36
37
39
40
41
42
43
44
44
45
52
O Smarty contm vrias funes internas. Funes internas so parte integral da linguagem de template. Voc no pode criar funes personalizadas com o mesmo nome de uma funo interna, e tambm no pode modificar funes internas.
capture
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
default
assign
string
No
n/a
capture usado para coletar toda a sada do template em uma varivel ao invs de mostra-lo. Qualquer contedo entre
{capture name="foo"} e {/capture} coletado na varivel especificada no atributo name. O contedo capturado pode ser usado no template a partir da varivel especial $smarty.capture.foo aonde foo o valor passado para o atributo name. Se voc
no passar um atributo name, ento ser usado "default". Todos os comandos {capture} devem ter o seu {/capture}. Voc
pode aninhar(colocar um dentro de outro) comandos capture.
Nota Tecnica: Smarty 1.4.0 - 1.4.4 coloca o contedo capturado dentro da varivel chamada $return. A partir do
1.4.5, este funcionamento foi mudado para usar o atributo name, ento atualize os seus templates de acordo.
Cuidado
Tenha cuidado quando capturar a sada do comando insert. Se voc tiver o cache em on e voc tiver comandos insert que voc espera que funcione com contedo do cache, no capture este contedo.
35
Funes internas
{include file="pegar_banner.tpl"}
{/capture}
{if $smarty.capture.banner ne ""}
<tr>
<td>
{$smarty.capture.banner}
</td>
</tr>
{/if}
config_load
Nome do Atributo
Tipo
Obrigatrio
Padro
file
string
Sim
n/d
Descrio
O nome do arquivo de
configurao para incluir
section
string
No
n/d
scope
string
No
local
global
boolean
No
No
Esta funo usada para carregar as variveis de um arquivo de configurao dentro de um template. Veja Arquivos de
Configurao para mais informaes.
36
Funes internas
<html>
<title>{#tituloPagina#}</title>
<body bgcolor="{#cordeFundo}">
<table border="{#tamanhoBordaTabela}" bgcolor="{#cordeFundotabela#}">
<tr bgcolor="{#cordeFundoLinha#}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
Arquivos de configurao podem conter sees tambm. Voc pode carregar variveis de uma seo adicionando o atributo
section.
NOTA: Config file sections e a funo embutida de template section no tem nada a ver um com o outro, eles apenas tem
uma mesma conveno de nomes.
foreach,foreachelse
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
from
string
Sim
n/d
item
string
Yes
n/d
key
string
No
n/d
name
string
No
n/d
Loops foreach so uma alternativa para loops section. foreach usado para pegar cada elemento de uma matriz associativa
simples. A sintaxe para foreach muito mais simples do que section, mas tem a desvantagem de poder ser usada apenas para uma nica matriz. Tags foreach devem ter seu par /foreach. Os parmetros requeridos so from e item. O nome do loop
37
Funes internas
foreach pode ser qualquer coisa que voc queira, feito de letras, nmeros e sublinhados. Loops foreach podem ser aninhados, e o nome dos loops aninhados devem ser diferentes um dos outros. A varivel from (normalmente uma matriz de valores) determina o nmero de vezes do loop foreach. foreachelse executado quando no houverem mais valores na varivel
from.
MOSTRA:
id: 1000<br>
id: 1001<br>
id: 1002<br>
MOSTRA:
phone: 1<br>
fax: 2<br>
cell: 3<br>
phone: 555-4444<br>
fax: 555-3333<br>
cell: 760-1234<br>
Loop foreach tambm tem as suas prprias variveis para manipilar as propriedades foreach. Estas so indicadas assim:
{$smarty.foreach.foreachname.varname} com foreachname sendo o nome especificado no atributo name do foreach.
iteration
iteration usado para mostrar a interao atual do loop.
Iteration sempre comea em 1 e incrementado um a um em cada interao.
first
38
Funes internas
last
last definido como true se a interao atual do foreach for a ltima.
show
show usado como parmetro para o foreach. show um valor booleano, true ou false. Se false, o foreach no ser mostrado. Se tiver um foreachelse presente, este ser alternativamente mostrado.
total
total usado para mostrar o nmero de interaes do foreach. Isto pode ser usado dentro ou depois do foreach.
include
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
file
string
Sim
n/d
O nome do arquivo de
template a incluir
assign
string
No
n/d
[var ...]
[var type]
No
n/d
Tags include so usadas para incluir outros templates no template atual. Quaisquer variveis disponveis no template atual
tambm estaro disponveis junto com template includo. A tag include deve ter o atributo "file", o qual contm o caminho
do arquivo a incluir.
Voc pode opcionalmente passar o atributo assign, o qual ir especificar o nome de uma varivel de template para a qual
conter todo o contedo do include ao invs de mostr-lo.
Voc pode tambm passar variveis para o template includo como atributos. Quaisquer variveis passadas para um template includo como atributos esto disponveis somente dentro do escopo do template includo. As variveis passadas como
atributos sobrescrevem as variveis de template atuais, no caso de ambas terem o mesmo nome.
39
Funes internas
Use a sintaxe de template resources para incluir arquivos fora do diretrio $template_dir.
include_php
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
file
string
Sim
n/a
once
boolean
No
true
Quando incluir ou no
o arquivo php mais de
uma vez se includo vrias vezes
assign
string
No
n/a
Nota Tcnica: include_php est quase sendo retirado do Smarty, voc pode obter a mesma funcionalidade usando
uma funo customizada em um template. A nica razo para usar o include_php se voc realmente precisar deixar funo php fora do diretrio de plugin ou cdigo da sua aplicao. Veja a seo templates componentizados para mais detalhes.
Tags include_php so usadas para incluir um script php no seu template. Se a segurana estiver ativada, ento o script php
deve estar localizado no diretrio especificado na varivel $trusted_dir. A tag include_php deve ter o atributo "file", o qual
contm o caminho para o arquivo php includo, pode ser um camiho tanto absoluto ou relativo a $trusted_dir.
include_php um bom meio de manipular templates componentizados, e manter o cdigo PHP separado dos arquivos de
template. Digamos que voc tenha um template que mostre a navegao do seu site, o qual preenchido automaticamente a
partir de um banco de dados. Voc pode manter a sua lgica PHP que obtm os dados em um diretrio separado, e inclui-la
no topo do template. Agora voc pode incluir este template em qualquer lugar sem se preocupar se a informao do banco
de dados foi obtida antes de usar.
Por padro, os arquivos php so includos apenas uma vez mesmo se includos vrias vezes no template. Voc pode especificar que ele seja includo todas as vezes com o atributo once. Definindo once para false ir incluir o script php a cada vez
que ele seja includo no template.
40
Funes internas
Voc pode opcionalmente passar o atributo assign, o qual ir especificar uma varivel de template a qual ir conter toda a
sada de include_php em vez de mostra-la.
O objeto smarty esta disponvel como $this dentro do script php que voc incluiu.
insert
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
Sim
n/d
assign
string
No
n/d
script
string
No
n/d
O nome de um script
php que ser incluido
antes que a funo insert seja chamada
[var ...]
[var type]
No
n/d
Tags insert funcionam parecido com as tags include, exceto que as tags insert no vo para o cache quando caching esta ativado. Ela ser executada a cada invocao do template.
Digamos que voc tenha um template com um banner no topo da pgina. O banner pode conter uma mistura de html, imagens, flash, etc. Assim ns no podemos usar um link estatico aqui, e ns no queremos que este contedo fique no cache
junto com a pgina. E a que entra a tag insert: o template conhece os valores #banner_location_id# e #site_id# (obtidos de
um arquivo de configurao), e precisa chamar uma funo para obter o contedo do banner.
Funes internas
Neste exemplo, ns estamos usando o nome "getBanner" e passando os parmetros #banner_location_id# e #site_id#. O
Smarty ir procurar por uma funo chamada insert_getBanner() na sua aplicao PHP, passando os valores de
#banner_location_id# e #site_id# como primeiro argumento em uma matriz associativa. Todos os nomes de funo insert
em sua aplicao devem ser precedidas por "insert_" para prevenir possveis problemas com nomes de funes repetidos.
Sua funo insert_getBanner() deve fazer alguma coisa com os valores passados e retornar os resultados. Estes resultados
so mostrados no template no lugar da tag insert. Neste exemplo, o Smarty ir chamar esta funo: insert_getBanner(array("lid" => "12345","sid" => "67890")); e mostrar o resultado retornado no lugar da tag insert.
Se voc passar o atributo "assign", a sada da tag insert ser dada para esta varivel ao invs de ser mostrada no template.
Nota: definir a sada para uma varivel no til quando o cache esta ativo.
Se voc passar o atributo "script", este script php ser incluido (apenas uma vez) antes da execuo da funo insert. Este
o caso onde a funo insert no existe ainda, e um script php deve ser includo antes para faze-la funcionar. O caminho pode
ser absoluto ou relativo varivel $trusted_dir. Quando a segurana esta ativada, o script deve estar no local definido na varivel $trusted_dir.
O objeto Smarty passado como segundo argumento. Deste modo voc pode refenciar o objeto Smarty de dentro da funo.
Nota Tecnica: possvel ter partes do template fora do cache. se voc tiver caching ativado, tags insert no estaro no cache. Ela ser executada dinamicamente a cada vez que a pgina seja criada, mesmo com pginas em cache. Isto funciona bem para coisas como banners, pesquisa, previses do tempo, resultados de pesquisa, reas de
opnio do usurio, etc.
if,elseif,else
Comandos {if} no Smarty tem muito da mesma flexibilidade do php, com algumas caractersticas mais para o sistema de
template. Todo if deve ter o seu /if. else e elseif tambm so permitidos. Todos os condicionais do PHP so reconhecidos,
tais como ||, or, &&, and, etc.
A seguir est uma lsita dos qualificadores, que devem estar separados dos elementos por espao. Note que itens listado entre
[conchetes] so opcionais. Os equivalentes em PHP so mostrados quando aplicveis.
Qualificador
Alternativas
Exemplo de sintaxe
Significado
==
eq
$a eq $b
iguais
!=
ne, neq
$a neq $b
no iguais
>
gt
$a gt $b
maior que
<
lt
$a lt $b
menor que
>=
gte, ge
$a ge $b
maior ou igual
<=
lte, le
$a le $b
menor ou igual
not
not $a
negao (unary)
mod
$a mod $b
mdulo
$a is not div by 4
divisvel por
$a is not even
$a is not even by $b
$a is not odd
$a is not odd by $b
is [not] div by
is [not] even
is [not] even by
is [not] odd
is [not] odd by
42
Funes internas
ldelim,rdelim
43
Funes internas
ldelim e rdelim so usados para mostrar os delimitadores de templates literalmente, no nosso caso "{" ou "}". Ou voc pode
usar {literal}{/literal} para interpretar blocos de texto literalmente. Veja tambm {$smarty.ldelim} e {$smarty.rdelim}
literal
Tags literal permitem que um bloco de dados seja tratado literalmente, ou seja, no interpretado pelo Smarty. Isto tipicamente usado com blocos de cdigo javascript ou folhas de estilo (stylesheet), que s vezes contm chaves que podem entrar
em conflito com o delimitador de sintaxe. Qualquer coisa entre {literal}{/literal} no interpretado, mas mostrado. Se voc precisa que tags de templates sejam embutidas em um bloco literal, use {ldelim}{rdelim}.
php
Tags php permitem que cdigos php sejam embutidos diretamente nos templates. Eles no sero interpretados, no importando a definio de $php_handling. Esta opo somente para usurios avanados e normalmente no necessria.
44
Funes internas
section,sectionelse
Nome do atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
Sim
n/d
O nome da seo
loop
[$variable_name]
Sim
n/d
start
integer
No
A posio do ndice
que a seo vai comear. Se o valor negativo, a posio de inicio
calculada a partir do
final da matriz. Por
exemplo, se houverem
sete valores na matriz e
'start' for -2, o ndice
inicial 5. Valores invlidos (valores fora do
tamanho da matriz) so
automaticamente corrigidos para o valor vlido mais prximo.
step
integer
No
max
integer
No
show
boolean
No
true
Determina
quando
mostrar ou no esta
section
Os 'sections' de template so usados para percorrer os dados de uma matriz. Todas as tags section devem ser finalizadas com
/section. Os parmetros obrigatrios so name e loop. O nome da 'section' pode ser o que voc quiser, contendo letras, nmeros e sublinhados. As 'sections' podem ser aninhadas, e os nomes das sections devem ser nicos. A varivel 'loop'
(normalmente uma matriz de valores) determina o nmero de vezes que a section ser percorrida. Quando estiver exibindo
uma varivel dentro de uma section, o nome da section deve estar ao lado da varivel dentro de conchetes []. sectionelse
executado quando no houver valores na varivel 'loop'.
45
Funes internas
MOSTRA:
id: 1000<br>
id: 1001<br>
id: 1002<br>
MOSTRA:
id: 1000<br>
nome: John Smith<br>
endereo: 253 N 45th<br>
<p>
id: 1001<br>
nome: Jack Jones<br>
endereo: 417 Mulberry ln<br>
<p>
id: 1002<br>
nome: Jane Munson<br>
endereo: 5605 apple st<br>
<p>
46
Funes internas
name: {$name[customer]}<br>
address: {$address[customer]}<br>
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
{/section}
<p>
{/section}
MOSTRA:
id: 1000<br>
name: John Smith<br>
address: 253 N 45th<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: john@mydomain.com<br>
<p>
id: 1001<br>
name: Jack Jones<br>
address: 417 Mulberry ln<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<br>
<p>
id: 1002<br>
name: Jane Munson<br>
address: 5605 apple st<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<br>
<p>
MOSTRA:
name: John Smith<br>
home: 555-555-5555<br>
cell: 555-555-5555<br>
e-mail: john@mydomain.com<p>
name: Jack Jones<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jack@mydomain.com<p>
name: Jane Munson<br>
home phone: 555-555-5555<br>
cell phone: 555-555-5555<br>
e-mail: jane@mydomain.com<p>
Funes internas
Sections tambm tem as suas prprias variveis que manipulam as propriedades da section. Estas so indicadas assim:
{$smarty.section.nomesection.nomevariavel}
Nota: A partir do Smarty 1.5.0, a sintaxe para as variveis de propriedades da section mudou de
{%nomesecao.nomevariavel%} para {$smarty.section.nomesection.nomevariavel}. A sintaxe antiga ainda suportada, mas voc ver referncias somente nova sintaxe no manual.
index
index usado para mostrar o ndice atual do loop, comeando em zero (ou pelo atributo start caso tenha sido definido), e incrementado por um (ou pelo atributo step caso tenha sido definido).
Nota Tcnica:: Se as propriedades 'start' e 'step' da section no foram modificadas, elas iro funcionar da mesma
maneira que a propriedade 'interation' da section funcionam, exceto que ela comea do 0 ao invs de 1.
MOSTRA:
0 id: 1000<br>
1 id: 1001<br>
2 id: 1002<br>
index_prev
index_prev usado para mostrar o ndice anterior do loop. No primeiro loop, o valor dele -1.
MOSTRA:
0 id: 1000<br>
O id do consumidor ir mudar<br>
48
Funes internas
1 id: 1001<br>
O id do consumidor ir mudar<br>
2 id: 1002<br>
O id do consumidor ir mudar<br>
index_next
index_next usado para mostrar o prximo indice do loop. No ltimo loop, isto ainda um mais o ndice atual( respeitando
a definio do atributo step, caso tenha sido definido.)
MOSTRA:
0 id: 1000<br>
O id do consumidor ir mudar<br>
1 id: 1001<br>
O id do consumidor ir mudar<br>
2 id: 1002<br>
O id do consumidor ir mudar<br>
iteration
iteration usado para mostrar a interao atual do loop.
Nota:: 'interation' no afetado pelas propriedades start, step e max da section, diferentemente da propriedade index. Interation diferente de 'index' comea com 1 ao invs de 0. 'rownum' um sinnimo de 'interation', eles exercem a mesma funo.
MOSTRA:
interao atual do loop: 1
5 id: 1000<br>
O id do consumidor ir mudar<br>
interao atual do loop: 2
7 id: 1001<br>
49
Funes internas
O id do consumidor ir mudar<br>
interao atual do loop: 3
9 id: 1002<br>
O id do consumidor ir mudar<br>
first
first definido como true se a interao atual da section a primeira.
MOSTRA:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
last
last definido como true se a interao atual da section a ltima.
MOSTRA:
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
50
Funes internas
rownum
rownum usado para mostrar a interao atual do loop, comeando em um. um sinnimo de iteration, eles exercem a
mesma funo.
MOSTRA:
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
loop
loop usado para exibir o nmero do ltimo ndice que a section percorreu. Ele pode ser usado dentro ou aps o trmino da
section.
MOSTRA:
0 id: 1000<br>
1 id: 1001<br>
2 id: 1002<br>
Foram mostrados 3 consumidores acima.
show
show usado como um parmetro da section. show um valor booleano, verdadeiro ou falso. Caso seja falso, a section no
ser mostrada. Se existir uma sectionelse presente, ela ser exibida.
51
Funes internas
{if $smarty.section.consumidor.show}
a section foi mostrada.
{else}
a section no foi mostrada.
{/if}
MOSTRA:
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
a section foi mostrada.
total
total usado para exibir o nmero de interaes que esta section ir percorrer. Ela pode ser usada dentro ou aps a section.
MOSTRA:
0 id: 1000<br>
2 id: 1001<br>
4 id: 1002<br>
Foram mostrados 3 consumidores acima.
strip
Muitas vezes web designers tem problemas com espaos em branco e caracteres especiais (carriage returns) afetam a exibio do HTML ("caractersticas" do navegador), assim voc obrigado colocar todas as suas tags juntas para obter os resultados esperados. Isso geralmente acaba tornando o template ilegvel ou no manipulvel.
Tudo entre as tags {strip}{/strip} no Smarty tem seus espaos extras ou caracteres especiais (carriage returns) removidos no
incio e fim das linhas antes de elas serem exibidas. Deste modo voc pode manter seu template legvel, e no se preocupar
com espaos extras causando problemas.
Nota Tcnica: {strip}{/strip} no afeta o contedo das variveis de template. Veja modificador strip.
52
Funes internas
MOSTRAR:
Observe que no exemplo acima, todas as linhas comeam e terminam com tags HTML. Esteja ciente para que todas as linhas fiquem juntas. Se voc tiver texto simples no incio ou final de uma linha, ele ser juntado na hora da converso e pode
causar resultados no desejados.
53
54
54
55
56
56
57
58
59
60
62
63
66
69
71
72
73
73
77
O Smarty contm vrias funes personalizadas que voc pode usar em seus templates.
assign
Nome do Atributo
Tipo
Obrigatrio
Padro
var
string
Sim
n/a
value
string
Yes
n/a
assign usado para definir o valor de uma varivel de template durante a execuo do template.
counter
54
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
default
O nome do contador
start
number
No
O nmero no qual a
contagem se inicia
skip
number
No
O intervalo entre as
contagens
direction
string
No
up
boolean
No
true
Quando mostrar ou no
o valor
assign
string
No
n/a
A varivel de template
que vai receber a sada
counter usada para mostrar uma contagem. counter ir se lembrar de count em cada interao. Voc pode ajustar o nmero, o intervalo e a direo da contagem, assim como detrminar quando mostrar ou no a contagem. Voc pode ter vrios
contadores ao mesmo tempo, dando um nome nico para cada um. Se voc no der um nome, o nome 'default' ser usado.
Se voc indicar o atributo especial "assign", a sada da funo counter ser passada para essa varivel de template ao invs
de ser mostrada no template.
cycle
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
default
O nome do ciclo
values
mixed
Sim
n/d
Os valores do ciclo, ou
uma lista delimitada
por vrgula (veja o atributo delimiter), ou uma
matriz de valores.
boolean
No
true
Quando mostrar ou no
o valor
advance
boolean
No
true
Quando avanar ou no
para o prximo valor
delimiter
string
No
55
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
no atributo 'values'.
assign
string
No
n/d
A varivel de template
que receber a sada
Cycle usado para fazer um clico atravs de um conjunto de valores. Isto torna fcil alternar entre duas ou mais cores em
uma tabela, ou entre uma matriz de valores.
Voc pode usar o cycle em mais de um conjunto de valores no seu template. D a cada conjunto de valores um nome nico.
Voc pode fazer com que o valor atual no seja mostrado definindo o atributo print para false. Isto til para pular um valor.
O atributo advance usado para repetir um valor. Quando definido para false, a prxima chamada para cycle ir mostrar o
mesmo valor.
Se voc indicar o atributo especial "assign", a sada da funo cycle ser passada para uma varivel de template ao invs de
ser mostrado diretamente no template.
debug
Nome do Atributo
Tipo
Obrigatrio
Padro
output
string
No
html
Descrio
Tipo de sada, html ou
javascript
{debug} mostra o console de debug na pgina. Ele funciona independente da definio de debug. J que ele executado em
tempo de execuo, ele capaz apenas de mostrar as variveis definidas, e no os templates que esto em uso. Mas voc pode ver todas as variveis disponveis no escopo do template.
eval
Nome do Atributo
Tipo
Obrigatrio
Padro
var
mixed
Sim
n/a
56
Descrio
Varivel (ou string) pa-
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
ra avaliar
assign
string
No
n/a
A varivel de template
que receber a sada
eval usado para avaliar uma varivel como template. Isto pode ser usado para coisas como embutir tags/variveis de template dentro de variveis ou tags/variveis dentro de variveis em um arquivo de configurao.
Se voc indicar o atributo especial "assign", a sada da funo eval ir para esta varivel de template ao invs de aparecer no
template.
Nota Tcnica: Variveis avaliadas so tratadas igual a templates. Elas seguem o mesmo funcionamento para escapar e para segurana como se fossem templates.
Nota Tcnica: Variveis avaliadas so compiladas a cada invocao, as verses compiladas no so salvas. Entretando, se voc tiver o cache ativado, a sada vai ficar no cache junto com o resto do template.
fetch
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
file
string
Sim
n/a
assign
string
No
n/a
A varivel de template
que vai receber a sada
fetch usado para obter arquivos do sistema de arquivos local, http ou ftp, e mostrar o seu contedo. Se o nome do arquivo
57
Funes Personalizadas
comear com "http://", a pgina do web site ser obtida e mostrada. Se o nome do arquivo comear com "ftp://", o arquivo
ser obtido do servidor ftp e mostrado. Para arquivos locais, o caminho completo do sistema de arquivos deve ser dado, ou
um caminho relativo ao script php executado.
Se voc indicar o atributo especial "assign", a sada da funo fetch ser passada para uma varivel de template ao invs de
ser mostrado no template. (novo no Smarty 1.5.0)
Nota Tcnica: fetch no suporta redirecionamento http, tenha certeza de incluir a barra no final aonde necessrio.
Nota Tcnica: Se a segurana do template esta ativada e voc estiver obtendo um arquivo do sistema de arquivos
locais, fetch ir funcionar apenas em arquivos de um dos diretrios definidos como seguros. ($secure_dir)
html_checkboxes
Nome do Atributo
Tipo
Obrigatrio
Padro
name
string
No
checkbox
Descrio
O nome da lista checkbox
values
array
n/a
output
array
n/a
selected
string/array
No
empty
O(s)
elemento(s)
checkbox marcado(s)
options
matriz
n/a
separator
string
No
empty
labels
boolean
No
true
html_checkboxes uma funo personalizada que cria um grupo de checkbox com os dados fornecidos. Ela cuida de
qual(is) item(s) esto selecionado(s) por padro. Os atributos obrigatrios so values e output, a menos que voc use opti58
Funes Personalizadas
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
name="checkbox[]"
name="checkbox[]"
name="checkbox[]"
name="checkbox[]"
value="1000"
value="1001"
value="1002"
value="1003"
html_image
Nome do Atributo
Tipo
Obrigatrio
Padro
file
string
Sim
n/a
nome/caminho para a
imagem
border
string
No
tamanho da borda de
contorno da imagem
height
string
No
width
string
No
59
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
basedir
string
No
alt
string
No
""
descrio alternativa da
imagem
href
string
No
n/a
html_image uma funo customizada que gera uma tag HTML para uma imagem. A altura e a largura so automaticamente calculadas a partir do arquivo de imagem se nenhum valor fornecido.
basedir o diretrio base do qual caminhos relativos de imagens esto baseados. Se no fornecido, o document root do servidor (varivel de ambiente DOCUMENT_ROOT) usada como o diretrio base. Se a segurana est habilitada, o caminho
para a imagem deve estar dentro de um diretrio seguro.
href o valor href para onde a imagem ser linkada. Se um link fornecido, uma tag <a href="LINKVALUE"><a> posta
em volta da tag da imagem.
Nota Tcnica: html_image requer um acesso ao disco para ler a imagem e calcular a altura e a largura. Se voc
no usa caching de template, normalmente melhor evitar html_image e deixar as tags de imagem estticas para
performance otimizada.
html_options
Nome do Atributo
Tipo
Obrigatrio
Padro
values
array
n/a
output
array
n/a
selected
string/array
No
empty
o elemento do options
selecionado
options
associative array
n/a
name
string
No
empty
60
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
nado
html_options uma funo personalizada que cria um grupo html option com os dados fornecidos. Ela est atenta de quais
itens esto selecionados por padro. Atributos obrigatrios so 'values' e 'output', a menos que voc use options no lugar.
Se um valor dado um array, ele ser tratado como um OPTGROUP html, e mostrar os grupos. Recursividade suportada
pelo OPTGROUP. Todas as sadas so compatveis com XHTML.
Se o atributo opcional name dado, as tags <select name="groupname"></select> iro incluir a lista de opes dentro dela.
Caso contrrio apenas a lista de opes gerada.
Todos os parmetros que no esto na lista acima so exibidos como nome/valor dentro de <select>-tag. Eles so ignorados
se o opcional name no fornecido.
61
Funes Personalizadas
html_radios
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
radio
values
array
n/a
output
array
n/a
checked
string
No
empty
O elemento do radio
marcado
options
associative array
n/a
separator
string
No
empty
html_radios uma funo personalizada que cria grupo de botes de radio html com os dados fornecidos. Ele est atento para qual item est selecionado por padro. Atributos obrigatrios so 'values' e 'output', a menos que voc use 'options' no lugar disso. Toda sada compatvel com XHTML.
Todos os parmetros que no esto na lista acima so impressos como nome/valor de dentro de cada tag <input> criada.
62
Funes Personalizadas
type="radio"
type="radio"
type="radio"
type="radio"
name="id[]"
name="id[]"
name="id[]"
name="id[]"
html_select_date
Nome do Atributo
Tipo
Obrigatrio
Padro
prefix
string
No
Date_
time
timestamp/
YYYY-MM-DD
No
start_year
string
No
ano atual
o primeiro ano no menu dropdown, ou o nmero do ano, ou relativo ao ano atual (+/- N)
end_year
string
No
display_days
boolean
No
true
se mostra os dias ou
no
display_months
boolean
No
true
se mostra os meses ou
no
display_years
boolean
No
true
se mostra os anos ou
no
month_format
string
No
%B
qual o formato do ms
(strftime)
day_format
string
No
%02d
day_value_format
string
No
%d
year_as_text
booleano
No
false
se mostra ou no o ano
como texto
reverse_years
booleano
No
false
field_array
string
No
null
se um nome dado, as
caixas de seleo sero
exibidos assim que os
resultados forem devolvidos ao PHP na forma
de name[Day], name[Year],
name[Month].
day_size
string
No
null
adiciona o atributo de
tamanho para a tag select se for dada
63
Descrio
Com o que prefixar o
nome da varivel
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
month_size
string
No
null
adiciona o atributo de
tamanho para a tag de
select se for dada
year_size
string
No
null
adiciona o atributo de
tamanho para a tag de
select se for dada
all_extra
string
No
null
day_extra
string
No
null
month_extra
string
No
null
year_extra
string
No
null
field_order
string
No
MDY
field_separator
string
No
\n
month_value_format
string
No
%m
year_empty
string
No
null
month_empty
string
No
null
64
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
day_empty
string
No
null
Descrio
Caso fornecido ento o
primeiro elemento do
select-box 'dias' ter este nome e o valor "".
Note que voc pode
usar valores como
"YYYY-MM-" como
atributos de tempo para
indicar dias no selecionados.
html_select_date uma funo personalizada que cria menus dropdowns de data para voc. Ele pode mostrar qualquer um/
ou todos os anos, meses e dias.
65
Funes Personalizadas
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="Date_Year">
<option value="2001" selected>2001</option>
</select>
html_select_time
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
prefix
string
No
Time_
time
timestamp
No
tempo atual
display_hours
booleano
No
true
Exibir ou no as horas
display_minutes
booleano
No
true
Exibir ou no os minutos
display_seconds
booleano
No
true
Exibir ou no os segundos
display_meridian
booleano
No
true
use_24_hours
booleano
No
true
Usar ou no relgio de
24 horas
66
qual
usar
date/time
para
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
minute_interval
inteiro
No
second_interval
integer
No
field_array
string
No
n/a
all_extra
string
No
null
hour_extra
string
No
null
minute_extra
string
No
null
second_extra
string
No
null
meridian_extra
string
No
null
html_select_time uma funo personalizada que cria menus dropdowns de hora para voc. Ela pode mostrar alguns valores, ou tudo de hora, minuto, segundo e ainda no formato am/pm.
name="Time_Hour">
value="00">00</option>
value="01">01</option>
value="02">02</option>
value="03">03</option>
value="04">04</option>
value="05">05</option>
value="06">06</option>
value="07">07</option>
value="08">08</option>
value="09" selected>09</option>
value="10">10</option>
value="11">11</option>
value="12">12</option>
value="13">13</option>
value="14">14</option>
value="15">15</option>
value="16">16</option>
value="17">17</option>
value="18">18</option>
value="19">19</option>
value="20">20</option>
value="21">21</option>
67
Funes Personalizadas
<option value="22">22</option>
<option value="23">23</option>
</select>
<select name="Time_Minute">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20" selected>20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Second">
<option value="00">00</option>
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
68
Funes Personalizadas
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23" selected>23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Meridian">
<option value="am" selected>AM</option>
<option value="pm">PM</option>
</select>
html_table
Nome do atributo
Tipo
Obrigatrio
Padro
loop
array
Sim
n/d
69
Descrio
array de dados para ser
feito o loop
Funes Personalizadas
Nome do atributo
Tipo
Obrigatrio
Padro
Descrio
cols
inteiro
No
nmero de colunas na
tabela
table_attr
string
No
border="1"
tr_attr
string
No
empty
td_attr
string
No
empty
trailpad
string
No
hdir
string
No
right
vdir
string
No
down
html_table uma funo personalizada que transforma um array de dados em uma tabela HTML. O atributo cols determina
a quantidade de colunas que a tabela ter. Os valores table_attr, tr_attr e td_attr determinam os atributos dados para a tabela, tags tr e td. Se tr_attr ou td_attr so arrays, eles entraro em ciclo. trailpad o valor colocado dentro do trailing cells na
ltima linha da tabela se h alguma presente.
70
Funes Personalizadas
math
Nome do atributo
Tipo
Obrigatrio
Padro
Descrio
equation
string
Sim
n/a
format
string
No
n/a
o formato do resultado
(sprintf)
var
numrico
Sim
n/a
valor da varivel da
equao
assign
string
No
n/a
varivel de template
cuja sada ser atribuida
[var ...]
numrica
Sim
n/a
valor da varivel da
equao
math permite o desenhista de template fazer equaes matemticas no template. Qualquer varivel de template numrica pode ser usada nas equaes, e o resultado exibido no lugar da tag. As variveis usadas na equao so passadas como parmetros, que podem ser variveis de template ou valores estticos. +, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min,
pi, pow, rand, round, sin, sqrt, srans and tan so todos os operadores vlidos. Verifique a documentao do PHP para mais
informaes acerca destas funes matemticas.
Se voc fornece o atributo especial "assign", a sada da funo matemtica ser atribudo para esta varivel de template ao
invs de ser exibida para o template.
Nota Tcnica: math uma funo de performance cara devido ao uso da funo do php eval(). Fazendo a matemtica no PHP muito mais eficiente, ento sempre possvel fazer os clculos matemticos no PHP e lanar os resultados para o template. Definitivamente evite chamadas de funes de matemticas repetitivamente, como dentro
de loops de section.
71
Funes Personalizadas
6
{* voc pode fornecer um parmetro de formato em sprintf *}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
MOSTRA:
9.44
mailto
Nome do Atributo
Tipo
Obrigatrio
Padro
address
text
Descrio
string
Sim
n/d
O endereo de email
string
No
n/d
encode
string
No
none
cc
string
No
n/d
bcc
string
No
n/d
subject
string
No
n/d
Assunto do e-mail.
newsgroups
string
No
n/d
followupto
string
No
n/d
extra
string
No
n/d
mailto automatiza o processo de criao de links de e-mail e opcionalmente codifica eles. Codificar o e-mail torna mais difcil para web spiders pegarem endereos no seu site.
Nota Tcnica: javascript provavelmente o meio de codificao mais utilizado, entretanto voc pode usar codificao hexadecimal tambm.
72
Funes Personalizadas
{mailto
{mailto
{mailto
{mailto
{mailto
{mailto
{mailto
address="me@domain.com"}
address="me@domain.com" text="send me some mail"}
address="me@domain.com" encode="javascript"}
address="me@domain.com" encode="hex"}
address="me@domain.com" subject="Hello to you!"}
address="me@domain.com" cc="you@domain.com,they@domain.com"}
address="me@domain.com" extra='class="email"'}
MOSTRA:
<a href="mailto:me@domain.com" >me@domain.com</a>
<a href="mailto:me@domain.com" >send me some mail</a>
<SCRIPT language="javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%6
9%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%6d%65%40%64%6f%6d%
61%69%6e%2e%63%6f%6d%22%20%3e%6d%65%40%64%6f%6d%61%69%6e%2e%63%6f%6d%3c%2f%61%3e
%27%29%3b'))</SCRIPT>
<a href="mailto:%6d%65@%64%6f%6d%61%69%6e.%63%6f%6d" >&#x6d;&#x65;&#x40;&#x64;&
#x6f;&#x6d;&#x61;&#x69;&#x6e;&#x2e;&#x63;&#x6f;&#x6d;</a>
<a href="mailto:me@domain.com?subject=Hello%20to%20you%21" >me@domain.com</a>
<a href="mailto:me@domain.com?cc=you@domain.com%2Cthey@domain.com" >me@domain.com</a>
<a href="mailto:me@domain.com" class="email">me@domain.com</a>
popup_init
popup uma integrao com overLib, uma biblioteca usada para janelas popup. Esta usada para informaes sensveis ao
contexto, como janelas de ajuda ou dicas. popup_init deve ser usada uma vez ao topo de cada pgina que voc planeje usar a
funo popup. overLib foi escrita por Erik Bosrup, e a pgina esta localizada em http://www.bosrup.com/web/overlib/.
A partir da verso 2.1.2 do Smarty, overLib NO vem com a distribuio. Baixe o overLib, coloque o arquivo overlib.js
dentro da sua arvore de documentos e indique o caminho relativo para o parmetro "src" de popup_init.
popup
Nome do Atributo
Tipo
Obrigatrio
Padro
text
string
Sim
n/d
trigger
string
No
onMouseOver
sticky
boolean
No
false
caption
string
No
n/d
fgcolor
string
No
n/d
bgcolor
string
No
n/d
73
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
textcolor
string
No
n/d
capcolor
string
No
n/d
closecolor
string
No
n/d
textfont
string
No
n/d
captionfont
string
No
n/d
closefont
string
No
n/d
textsize
string
No
n/d
captionsize
string
No
n/d
Define o tamanho da
fonte do ttulo
closesize
string
No
n/d
Define o tamanho da
fonte do texto "Close"
width
integer
No
n/d
height
integer
No
n/d
left
boolean
No
false
right
boolean
No
false
center
boolean
No
false
above
boolean
No
false
below
boolean
No
false
border
integer
No
n/d
offsetx
integer
No
n/d
A que distancia do
mouse o popup ir aparecer, horizontalmente
offsety
integer
No
n/d
A que distancia do
mouse o popup ir aparecer, verticalmente
fgbackground
No
n/d
bgbackground
url to image
No
n/d
74
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
da ao invs de uma cor
para o popup. Nota: voc deve definir bgcolor
como "" ou a cor ir
aparecer tambm. NOTA: quando tiver um
link "Close", o Netscape ir redesenhar as clulas da tabela, fazendo
as coisas aparecerem
incorretamente
closetext
string
No
n/d
noclose
boolean
No
n/d
No mostra o texto
"Close" em coladas
com um ttulo
status
string
No
n/d
autostatus
boolean
No
n/d
autostatuscap
string
No
n/d
inarray
integer
No
n/d
caparray
integer
No
n/d
capicon
url
No
n/d
snapx
integer
No
n/d
snapy
integer
No
n/d
fixx
integer
No
n/d
fixy
integer
No
n/d
75
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
cal position Note: overrides all other vertical
placement
background
url
No
n/d
padx
integer,integer
No
n/d
Prenche a imagem de
fundo com espaos em
branco horizontal para
colocao do texto. Nota: este um comando
de dois parmetros
pady
integer,integer
No
n/d
Prenche a imagem de
fundo com espaos em
branco vertical para colocao do texto. Nota:
este um comando de
dois parmetros
fullhtml
boolean
No
n/d
frame
string
No
n/d
Controla popups em
frames diferentes. Veja
a pgina da overlib para maiores informaes
sobre esta funo
timeout
string
No
n/d
delay
integer
No
n/d
hauto
boolean
No
n/d
vauto
boolean
No
n/d
76
Funes Personalizadas
textformat
Nome do Atributo
Tipo
Obrigatrio
Padro
style
string
No
n/d
Descrio
indent
number
No
O nmero de caracteres
para endentar cada linha.
indent_first
number
No
O nmero de caracteres
para endentar a primeira linha
indent_char
string
No
(single space)
wrap
number
No
80
wrap_char
string
No
\n
wrap_cut
boolean
No
false
Se true, wrap ir quebrar a linha no caractere exato em vez de quebrar ao final da palavra
assign
string
No
n/d
A varivel de template
que ir receber a sada
estilo pr-definido
textformat uma funo de bloco usada para formatar texto. Basicamente ela remove espaos e caracteres especiais, e formata os pargrafos quebrando o texto ao final de palavras e identando linhas.
Voc pode definir os parmetros explicitamente, ou usar um estilo pr-definido. Atualmente o nico estilo disponvel
"email".
77
Funes Personalizadas
This
This
This
This
is
is
is
is
foo.
foo.
foo.
foo.
This is bar.
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
foo.
foo.
foo.
foo.
foo.
foo.
foo.
{/textformat}
MOSTRA:
This is foo. This is foo. This is foo.
This is foo. This is foo. This is foo.
This is bar.
bar foo bar foo foo.
foo. bar foo bar foo
foo foo. bar foo bar
bar foo foo. bar foo
is
is
is
is
is
is
foo.
foo.
foo.
foo.
foo.
foo.
This is bar.
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
foo.
foo.
foo.
foo.
foo.
foo.
foo.
{/textformat}
MOSTRA:
This is foo. This is foo. This is
foo. This is foo. This is foo. This
is foo.
This is bar.
bar foo bar foo foo.
foo. bar foo bar foo
bar foo foo. bar foo
bar foo bar foo foo.
foo foo.
is
is
is
is
foo.
foo.
foo.
foo.
78
Funes Personalizadas
This is foo.
This is foo.
This is bar.
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
foo.
foo.
foo.
foo.
foo.
foo.
foo.
{/textformat}
MOSTRA:
This is foo. This is foo. This
is foo. This is foo. This is foo.
This is foo.
This is bar.
bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar
foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo.
{textformat style="email"}
This
This
This
This
This
This
is
is
is
is
is
is
foo.
foo.
foo.
foo.
foo.
foo.
This is bar.
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
bar
bar
bar
bar
bar
bar
bar
foo
foo
foo
foo
foo
foo
foo
foo.
foo.
foo.
foo.
foo.
foo.
foo.
{/textformat}
MOSTRA:
This is foo. This is foo. This is foo. This is foo. This is foo. This is
foo.
This is bar.
bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
foo.
79
Valores de variveis de arquivos de configurao pode estar entre aspas, mas no necessrio. Voc pode usar tanto aspas
simples como duplas. Se voc tiver um valor que ocupe mais de uma linha, coloque-o dentre trs aspas ("""). Voc pode colocar comentrios em arquivos de configurao com qualquer sintaxe que no vlida para um arquivo de configurao.
Ns recomendamos usar um # (cancela) no incio de cada linha que contm o comentrio.
Este arquivo de configurao tem duas sees. Nomes de sees devem estar entre conchetes []. Nomes de seo podem ser
string arbritraria que no contenham os smbolos [ ou ]. As quatro variveis no topo so variveis globais, ou variveis que
no pertencem uma seo. Estas variveis sempre so carregadas do arquivo de configurao. Se uma seo em particular
carregada, ento as variveis globais e as variveis desta seo tambm so carregadas. Se uma varivel de seo e global
j existirem, a varivel de seo ser utilizada. Se voc tiver duas variveis na mesma seo com o mesmo nome, a ltima
ser utilizada.
Arquivos de configurao so carregados no template usando a funo embutida config_load.
Voc pode esconder as variveis ou uma seo inteira colocando um ponto antes do nome da seo ou varivei. Isso til
em casos no qual sua aplicao l arquivos de configurao e obtm dados sensveis que no so necessrios para o sistema
de templates. Se a edio de seus templates terceirizada, voc ter certeza que eles no iro ler os dados sensveis do arquivo de configurao que carregado no template.
80
81
84
84
85
85
85
86
86
86
86
86
86
86
87
87
87
87
87
88
88
88
88
88
88
88
88
89
89
89
89
90
90
90
90
90
90
90
90
90
91
92
92
93
93
94
94
94
95
95
clear_compiled_tpl .............................................................................................................. 95
clear_config ....................................................................................................................... 96
config_load ........................................................................................................................ 96
display .............................................................................................................................. 96
fetch ................................................................................................................................. 97
get_config_vars .................................................................................................................. 98
get_registered_object ........................................................................................................... 98
get_template_vars ............................................................................................................... 99
is_cached ........................................................................................................................... 99
load_filter .......................................................................................................................... 99
register_block .................................................................................................................... 100
register_compiler_function .................................................................................................. 100
register_function ................................................................................................................ 101
register_modifier ................................................................................................................ 101
register_object ................................................................................................................... 102
register_outputfilter ............................................................................................................ 102
register_postfilter ............................................................................................................... 102
register_prefilter ................................................................................................................ 102
register_resource ................................................................................................................ 102
trigger_error ...................................................................................................................... 103
template_exists .................................................................................................................. 103
unregister_block ................................................................................................................ 103
unregister_compiler_function ............................................................................................... 103
unregister_function ............................................................................................................. 103
unregister_modifier ............................................................................................................ 104
unregister_object ................................................................................................................ 104
unregister_outputfilter ......................................................................................................... 104
unregister_postfilter ............................................................................................................ 104
unregister_prefilter ............................................................................................................. 104
unregister_resource ............................................................................................................ 104
14. Caching ....................................................................................................................................... 106
Configurando Caching ........................................................................................................ 106
Multiple Caches Per Page .................................................................................................... 108
Grupos de Cache ................................................................................................................ 109
Controlling Cacheability of Plugins' Output ............................................................................ 110
15. Advanced Features ........................................................................................................................ 112
Objetos ............................................................................................................................ 112
Prefilters .......................................................................................................................... 113
Postfilters ......................................................................................................................... 113
Output Filters (Filtros de Sada) ............................................................................................ 114
Funo Manipuladora de Cache ............................................................................................ 114
Recursos (Resources) .......................................................................................................... 116
16. Extendendo a Smarty com Plugins .................................................................................................... 120
Como os Plugins Funcionam ................................................................................................ 120
Convenes de Aparncia .................................................................................................... 120
Escrevendo Plugins ............................................................................................................ 121
Funes de Template .......................................................................................................... 121
Modifiers .......................................................................................................................... 123
Block Functions ................................................................................................................. 124
Funes Compiladoras ........................................................................................................ 125
Prefiltros/Posfiltros ............................................................................................................. 126
Filtros de sada .................................................................................................................. 127
Recursos (Resources) .......................................................................................................... 127
Inserts .............................................................................................................................. 129
83
SMARTY_DIR
Isso deve ser o caminho completo do path para a localizao dos arquivos de classe da Smarty. Se isso no for definido, ento a Smarty ir tentar determinar o valor apropriado automaticamente. Se definido, o path deve finalizar com uma barra.
84
85
85
86
86
86
86
86
86
86
87
87
87
87
87
88
88
88
88
88
88
88
88
89
89
89
89
90
90
90
90
90
90
90
90
90
91
$template_dir
Este o nome padro do diretrio de template. Se voc no fornecer um tipo de recurso quando incluir arquivos, ento ele
ir ser encontrado aqui. Por padro isso "./templates", significando que isso ir olhar para o diretrio de templates no mesmo diretrio que est executando o script PHP.
Notas Tcnicas: No recomendado colocar este diretrio sob um diretrio document root do seu webserver.
$compile_dir
85
Variveis
Esse o nome do diretrio onde os template compilados esto localizados Por padro isso "./templates_c", significando
que isso ir olhar para o diretrio de templates no mesmo diretrio que est executando o script PHP.
Notas Tcnicas: Essa configurao deve ser um path relativo ou um path absoluto. include_path no usado para
escrever em arquivos.
Notas Tcnicas: No recomendado colocar este diretrio sob um diretrio document root do seu webserver.
$config_dir
Este o diretrio usado para armazenar arquivos de configurao usados nos templates. O padro "./configs", significando
que isso ir olhar para o diretrio de templates no mesmo diretrio que est executando o script PHP.
Notas Tcnicas: No recomendado colocar este diretrio sob um diretrio document root do seu webserver.
$plugins_dir
Esse o diretrio onde Smarty ir procurar por plugins que so necessrios. O Padro "plugins" sob o SMARTY_DIR. Se
voces especificar um path relativo, Smarty ir primeiro procurar sob o SMARTY_DIR, ento relativo para o cwd (current
working directory), ento relativo para cada entrada no seu PHP include path.
Notas tcnicas: Para uma melhor performance, no 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.
$debugging
Isso habilita o debugging console. O console uma janela de javascript que informa voc sobre os arquivos de template
includos e variveis destinadas para a pgina de template atual.
$debug_tpl
Este o nome do arquivo de template usado para o console de debug. Por padro, nomeado como debug.tpl e est localizado no SMARTY_DIR.
$debugging_ctrl
Isso permite caminhos alternativos de habilitar o debug. NONE no significa que mtodos alternativos so permitidos. URL
significa quando a palavra SMARTY_DEBUG foi encontrado na QUERY_STRING, que o debug est habilitado para a
chamada do script. Se $debugging true, esse valor ignorado.
$global_assign
Essa a lista de variveis que esto sempre implicitamente fixadas para o template engine. Isso est acessvel para fazer variveis globais ou variveis do servidor disponveis para todo o template sem ter que fix-las manualmente. Cada elemento
em $global_assign deve ser um nome de uma varivel global, ou um par de chave/valor, onde a chave o nome do array
global array e o valor o array de variveis fixadas deste array global. $SCRIPT_NAME globalmente fixado por padro
para $HTTP_SERVER_VARS.
Notas Tcnicas: Variveis de servidor podem ser acessadas atravs da varivel $smarty, como
{$smarty.server.SCRIPT_NAME}. Veja a seo da varivel $smarty.
$undefined
86
Variveis
Isso seta o valor de $undefined para Smarty, o padro null. Atualmente isso somente usado para setar variveis indefinidas em $global_assign para o valor padro.
$autoload_filters
Se h algum filtro que voc deseja carregar em cada chamada de template, voc pode especificar-lhes usando essa varivel e
a Smarty ir automaticamente carreg-los para voc. A varivel um array associativo onde as chaves so tipos de filtro e
os valores so arrays de nomes de filtros. Por exemplo:
$smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
'output' => array('convert'));
$compile_check
Em cima de cada requisio da aplicao PHP , Smarty testa para ver se o template atual foi alterado (diferentes time stamp)
desde a ltima compilao. Se isso foi alterado, ele ir recompilar o template. Se o template no foi compilado, ele ir compilar de qualquer maneira dessa configurao. Por padro esta varivel setada como true. Uma vez que a aplicao est em
produo (templates no sero alterados), o passo compile_check no necessrio. Tenha certeza de setar $compile_check
para "false" para maior performance. Note que se voc alterar isso para "false" e o arquivo de template est alterado, voc
*no* ir ver a alterao desde que o template seja recompilado. Se caching est habilitado e compile_check est habilitado,
ento os arquivos de cache no sero regerados se um complexo arquivo de ou um arquivo de configurao foi atualizado.
Veja $force_compile ou clear_compiled_tpl.
$force_compile
Isso fora Smarty para (re)compilar templates a cada requisio. Essa configurao sobreescreve $compile_check. Por padro isso est desabilitado. Isso til para desenvolvimento e debug. Isso nunca deve ser usado em ambiente de produo.
Se caching est habilitado, os arquivo(s) de cache sero regerados todo momento.
$caching
Isto diz Smarty se h ou no sada de cache para o template. Por padro isso est setado para 0, ou desabilitado. Se seu
template gerar contedo redundante, necessrio ligar o caching. Isso ir resultar num ganho significativo de performance.
Voc pode tambm ter mltiplos caches para o mesmo template. Um valor de 1 ou 2 caching habilitados. 1 diz Smarty para usar a varivel atual $cache_lifetime para determinar se o cache expirou. Um valor 2 diz Smarty para usar o valor cache_lifetime ento para quando o cache foi gerado. Desta maneira voc pode setar o cache_lifetime imediatamente antes de
buscar o template para ter controle sobre quando este cache em particular expira. Veja tambm is_cached.
Se $compile_check est habilitado, o contedo do cache ir ser regerado se algum dos templates ou arquivos de configurao que so parte deste cache estiverem alterados. Se $force_compile est habilitado, o contedo do cache ir sempre ser regerado.
$cache_dir
Isso o nome do diretrio onde os caches do template so armazenados. Por padro isso "./cache", significando que isso
ir olhar para o diretrio de cache no mesmo diretrio que executar scripts PHP. Voc pode tambe usar sua prpria funo
customizada de manuseamento de cache para manipular arquivos de cache, que iro ignorar esta configurao.
Notas Tcnicas: Essa configurao deve ser ou um relativo ou absoluto path. include_path no usado para escrever em arquivos.
Notas Tcnicas: No recomendado colocar este diretrio sob um diretrio document root do seu webserver.
87
Variveis
$cache_lifetime
Isso o comprimento de tempo em segundos que um cache de template vlido. Uma vez que este tempo est expirado, o
cache ir ser regerado. $caching deve ser configurado para "true" para $cache_lifetime para ter algum propsito. Um valor
de -1 ir forar o cache a nunca expirar. Um valor de 0 ir fazer com que o cache seja sempre regerado (bom somente para
testes, o mtodo mais eficiente de desabilitar caching set-lo para $caching = false.)
Se $force_compile est habilitado, os arquivos de cache sero regerados todo o tempo, eficazmente desativando caching.
Voc pode limpar todos os arquivos de cache com a funo clear_all_cache(), ou arquivos individuais de cache (ou grupos)
com a funo clear_cache().
Notas Tcnicas: Se voc quiser dar para certos templates seu prprio tempo de vida de um cache, voc poderia fazer isso configurando $caching = 2, ento configure $cache_lifetime para um nico valor somente antes de chamar
display() ou fetch().
$cache_handler_func
Voc pode fornecer uma funo padro para manipular arquivos de cache ao invs de usar o mtodo built-in usando o
$cache_dir. Veja a seo cache handler function section para obter detalhes.
$cache_modified_check
Se configurado para true, Smarty ir respeitar o If-Modified-Since header enviado para o cliente. Se o timestamp do arquivo
de cache no foi alterado desde a ltima visita, ento um header "304 Not Modified" ir ser enviado ao invs do contedo.
Isso funciona somente em arquivos de cache sem tags insert.
$config_overwrite
Se configurado para true, variveis lidas no arquivo de configuraes iro sobrescrever uma a outra. Do contrrio, as variveis sero guardadas em um array. Isso til se voc quer armazenar arrays de dados em arquivos de configurao, somente
lista tempos de cada elemento mltiplo. true por padro.
$config_booleanize
Se setado para true, os valores do arquivo de configurao de on/true/yes e off/false/no ficar convertido para valores booleanos automaticamente. Desta forma voc pode usar os valores em um template como: {if #foobar#} ... {/if}. Se foobar estiver on, true ou yes, a condio {if} ir executar. true por padro.
$config_read_hidden
Se configurado para true, esconde sees (nomes de sees comeados com um perodo) no arquivo de configurao podem
ser lidos do template. Tipicamente voc deixaria isto como false, desta forma voc pode armazenar dados sensitivos no arquivo de configurao como um parmetro de banco de dados e sem preocupar-se sobre o template carreg-los. false o padro.
$config_fix_newlines
Se setado para true, mac e dos newlines (\r e \r\n) no arquivo de configurao sero convertidos para \n quando eles forem
interpretados. true o padro.
$default_template_handler_func
88
Variveis
Essa funo chamada quando um template no pode ser obtido de seu recurso.
$php_handling
Isso diz Smarty como manipular cdigos PHP contido nos templates. H quatro possveis configuraes, padro sendo
SMARTY_PHP_PASSTHRU. Note que isso NO far efeito com cdigos php dentro de tags {php}{/php} no template.
NOTE: Usando cdigos PHP code dentro de templates altamente desencorajado. Use custom functions ou modifiers ao invs disso.
$security
$security true/false, o padro false. Security bom para situaes quando voc tem partes inconfiveis editando o template
(via ftp por exemplo) e voc quer reduzir os riscos de comprometimento da segurana do sistema atravs da linguagem de
template. Habilitando-o faz-se cumprir as regras da linguagem de template, a menos que especificamente cancelada com
$security_settings:
para
SMARTY_PHP_ALLOW,
isso
implicitamente
Arquivos locais podem ser somente trazidos do diretrio listado em $secure_dir usando no array {fetch}
alterado
para
$secure_dir
Isso um array de todos os diretrios locais que so considerados seguros. {include} e {fetch} usam estes (diretrios) quando security est habilitado.
$security_settings
Essas configuraes so usadas para cancelar ou especificar configuraes de segurana quando security est habilitado. Estas possuem as seguintes configuraes possveis:
PHP_HANDLING - true/false. Se setado para true, a configurao de $php_handling no checada para security.
IF_FUNCS - Isso um array de nomes de funes PHP permitidas nos blocos IF.
89
Variveis
INCLUDE_ANY - true/false. Se setado para true, algum template pode ser includo para um arquivo do sistema, apesar
de toda a lista de $secure_dir.
PHP_TAGS - true/false. Se setado para true, as tags {php}{/php} so permitidas nos templates.
MODIFIER_FUNCS - Isso um array de nomes de funes PHP permitidas usadas como modificadores de varivel.
$trusted_dir
$trusted_dir somente usado quando $security est habilitado. Isso um array de todos os diretrios que so considerados
confiveis. Diretrios confiveis so onde voc ir deixar seus scripts php que so executados diretamente para o template
com {include_php}.
$left_delimiter
Este o delimitador esquerdo usado para a linguagem de template. O padro "{".
$right_delimiter
Este o delimitador direito usado para a linguagem de template. O padro "}".
$compiler_class
Especifica o nome do compilador de classes que Smarty ir usar para compilar templates. O padro 'Smarty_Compiler'.
Para usurios avanados somente.
$request_vars_order
A ordem na qual as variveis requeridas sero registradas, similar ao variables_order no php.ini
$request_use_auto_globals
Especifica se a Smarty deve usar variveis globais do php $HTTP_*_VARS[] ($request_use_auto_globals=false que o valor padro) ou $_*[] ($request_use_auto_globals=true). Isso afeta templates que fazem uso do {$smarty.request.*},
{$smarty.get.*} etc. . Ateno: Se voc setar $request_use_auto_globals para true, variable.request.vars.order no tero
efeito mas valores de configuraes do php gpc_order so usados.
$compile_id
Identificador de compilao persistente. Como uma alternativa para passar o mesmo compile_id para cada chamada de funo, voc pode setar este compile_id e isso ir ser usado implicitamente aps isso.
$use_sub_dirs
Configure isso para false se seu ambiente de PHP no permite a criao de subdiretrios pela Smarty. Subdiretrios so
muito eficientes, ento use-os se voc conseguir.
$default_modifiers
90
Variveis
Isso um array de modificadores implicitamente aplicados par cada varivel no template. Por Exemplo, para cada varivel
HTML-escape por padro, use o array('escape:"htmlall"'); Para fazer a varivel isenta para modificadores padro, passe o
modificador especial "smarty" com um valor de parmetro "nodefaults" modificando isso, como {$var|smarty:nodefaults}.
$default_resource_type
Isso diz Smarty qual tipo de recurso usar implicitamente. O valor padro 'file', significando que
$smarty->display('index.tpl'); e $smarty->display('file:index.tpl'); so idnticos no significado. Veja o captulo resource para
detalhes.
91
append
void append()(var);
mixed var;
void append()(varname, var);
string varname;
mixed var;
void append()(varname, var, merge);
string varname;
mixed var;
92
Mtodos
boolean merge;
Isso usado para adicionar um elemento para um array fixado. Se voc adicionar uma string como valor, isso ir converterse para um valor de array e ento adicion-lo. Voc pode explicitamente passar pares nomes/valores, ou arrays associativos
contendo o par nome/valor. Se voc passar o terceiro parmetro opcional para true, o valor unir-se ao array atual ao invs de
ser adicionado.
Notas Tcnicas: O parmetro de unio respeita a chave do array, ento se voc mesclar dois ndices nmericos de
um array, eles devem sobrescrever-se um ao outro ou em resultados no sequncias de chave. Isso diferente da
funo de PHP array_merge() que apaga as chaves e as renumera.
append_by_ref
void append_by_ref()(varname, var);
string varname;
mixed var;
void append_by_ref()(varname, var, merge);
string varname;
mixed var;
boolean merge;
Isso usado para adicionar vlaores para o template por referncia. Se voc adicionar uma varivel por referncia e ento alterar este valor o valor adicionado enxergar a alterao tambm. Para objetos, append_by_ref() tambm evita uma cpia
em memria do objeto adicionado. Veja o manual do PHP em referenciando variveis para uma melhor explanao sobre o
assunto. Se voc passar o terceiro parmetro opcional para true, o valor ir ser mesclado com o array atual ao invs de adicion-lo.
Notas Tcnicas: O parmetro de unio respeita a chave do array, ento se voc mesclar dois ndices nmericos de
arrays, eles devem sobrescrever-se um ao outro ou em resultados no sequncias de chave. Isso diferente da funo de PHP array_merge() que apaga as chaves numricas e as renumera.
assign
void assign()(var);
mixed var;
void assign()(varname, var);
string varname;
mixed var;
Isso usado para fixar valores para o template. Voc pode explicitamente passar pares de nomes/valores, ou um array associativo contendo o par de nome/valor.
93
Mtodos
assign_by_ref
void assign_by_ref()(varname, var);
string varname;
mixed var;
Isso usado para fixar valores para o template por referncia ao invs de fazer uma cpia. Veja o manual do PHP na parte
sobre referncia de variveis para uma explanao mais detalhada.
Notas Tcnicas: Isso usado para fixar valores para o template por referncia. Se voc fixar uma varivel por referncia e ento alterar o valor dela, o valor fixado enxergar o valor alterado tambm. Para objetos, assign_by_ref() tambm restringe uma cpia de objetos fixados em memria. Veja o manual do php em refereciando
variveis para uma melhor explanao.
clear_all_assign
void clear_all_assign()();
;
Isso limpa o valor de todas as variveis fixadas.
clear_all_cache
void clear_all_cache()(expire time);
int expire time;
Isso limpa completamente o cache de template. Como um parmetro opcional, voc pode fornecer um ano mnimo em segundos que o arquivo de cache deve ter antes deles serem apagados.
Mtodos
clear_assign
void clear_assign()(var);
string var;
Isso limpa o valor de uma varivel fixada. Isso pode ser um valor simples, ou um array de valores.
clear_cache
void clear_cache ([string template [, string cache id [, string compile id [, int expire time]]]])
Isso limpa o cache de um template especfico. Se voc tem mltiplos caches para este arquivo, voc limpa o cache especfico fornecendo o cache id como o segundo parmetro. Voc pode tambm passar um compile id como um terceiro parmetro. Voc pode "agrupar" templates juntos e ento eles podem ser removidos como um grupo. Veja o caching section para
maiores informaes. Como um quarto parmetro opcional, voc pode fornecer um ano mnimo em segundos que o arquivo
de cache deve ter antes dele ser apagado.
clear_compiled_tpl
void clear_compiled_tpl()(tpl_file);
string tpl_file;
Isso limpa a verso compilada do recurso de template especificado, ou todos os arquivos de templates compilados se nenhum for especificado. Essa funo para uso avanado somente, no normalmente necessria.
95
Mtodos
clear_config
void clear_config ([string var])
Isso limpa todas as variveis de configurao fixadas. Se um nome de varivel fornecido, somente esta varivel apagada.
config_load
void config_load (string file [, string section])
Isso carrega o arquivo de configurao de dados e fixa-o para o template. Isso funciona idntico a funo config_load.
Notas Tcnicas: partir da Smarty 2.4.0, variveis de template fixadas so mantidas atravs de fetch() e display().
Variveis de configurao carregadas de config_load() so sempre de escopo global. Arquivos de configurao
tambm so compilados para execuo rpida, e repeita o force_compile e compile_check parmetros de configurao.
display
void display (string template [, string cache_id [, string compile_id]])
Isso mostra o template. Fornecendo um vlido template resource tipo e path. Como um segundo parmetro opcional, voc
pode passar um cache id. Veja o caching section para maiores informaes.
Como um terceiro parmetro opcional, voc pode passar um compile id. Isso est no evento que voc quer compilar diferentes verses do mesmo template, como ter templates compilados separadamente para diferentes linguagens. Outro uso para
compile_id quando voc usa mais do que um $template_dir mas somente um $compile_dir. Seta um compile_id em separado para cada $template_dir, de outra maneira templates com mesmo nome iro sobrescrever-se um ao outro. Voc pode
tambm setar a varivel $compile_id ao invs de passar isso para cada chamada de display().
96
Mtodos
{
// dummy up some data
$address = "245 N 50th";
$db_data = array(
"City" => "Lincoln",
"State" => "Nebraska",
"Zip" = > "68502"
);
$smarty->assign("Name","Fred");
$smarty->assign("Address",$address);
$smarty->assign($db_data);
}
// display the output
$smarty->display("index.tpl");
Use a sintaxe para template resources para mostrar arquivos fora do $template_dir directory.
fetch
string fetch (string template [, string cache_id [, string compile_id]])
Isso retorna a sada do template ao invs de mostr-lo. Fornecendo um tipo ou path vlido template resource. Como um segundo parmetro opcional, voc pode passar o cache id. Veja o caching section para maiores informaes.
Como um terceiro parmetro opcional, voc pode passar um compile id. Isso est no evento que voc quer compilar diferentes verses do mesmo template, como ter templates compilados separadamente para diferentes linguagens. Outro uso para
compile_id quando voc usa mais do que um $template_dir mas somente um $compile_dir. Seta um compile_id em separado para cada $template_dir, de outra maneira templates com mesmo nome iro sobrescrever-se uns aos outros. Voc pode
tambm setar a varivel $compile_id ao invs de pass-la para cada chamada de fetch().
97
Mtodos
get_config_vars
array get_config_vars ([string varname])
Isso retorna o valor da varivel de configurao dada. Se nenhum parmetro dado, um array de todas as variveis dos arquivos de configuraes retornado.
get_registered_object
array get_registered_object()(object_name);
string object_name;
Isso retorna uma referncia para um objeto registrado. Isso til para dentro de uma funo customizada quando voc precisa acessar diretamente um objeto registrado.
98
Mtodos
get_template_vars
array get_template_vars ([string varname])
Isso retorna o valor de uma varivel fixada. Se nenhum parmetro dado, um array de todas as varivels fixadas retornado.
is_cached
void is_cached()(template, cache_id);
string template;
[string cache_id];
Isso retorna true se h um cache vlido para esse template. Isso somente funciona se caching est setado para true.
Voc pode tambm passar um cache id como um segundo parmetro opcional no caso voc quer mltiplos caches para o
template dado.
load_filter
void load_filter()(type, name);
string type;
string name;
99
Mtodos
Essa funo pode ser usada para carregar um filtro de plugin. O primeiro argumento especifica o tipo do filtro para carregar
e pode ser um dos seguintes: 'pre', 'post', ou 'output'. O segundo argumento especifica o nome do filtro de plugin, por exemplo, 'trim'.
register_block
void register_block()(name, impl, cacheable, cache_attrs);
string name;
mixed impl;
bool cacheable;
array or null cache_attrs;
Use isso para registrar dinamicamente blocos de funes de plugins. Passe no bloco de nomes de funo, seguido por uma
chamada de funo PHP que implemente isso.
A chamada de uma funo-php impl pode ser (a) uma string contendo o nome da funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
$cacheable e $cache_attrs podem ser omitidos na maior parte dos casos. Veja Controlando modos de Sada de Cache dos
Plugins para obter informaes apropriadas.
register_compiler_function
void register_compiler_function()(name, impl, cacheable);
string name;
mixed impl;
bool cacheable;
Use isso para registrar dinamicamente uma funo de plugin compilador. Passe no nome da funo compilador, seguido pela funo PHP que implemente isso.
100
Mtodos
A chamada para funo-php impl pode ser uma string contendo o nome da funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo o mtodo desta classe.
$cacheable pode ser omitido na maioria dos casos. Veja Controlando modos de Sada de Cache dos Plugins para obter informaes apropriadas.
register_function
void register_function()(name, impl, cacheable, cache_attrs);
string name;
mixed impl;
bool cacheable;
array or null cache_attrs;
Use isso para registrar funes de plugins dinamicamente para o template. Passe no template o nome da funo, seguido pelo nome da funo PHP que implemente isso.
A chamada para funo-php impl pode ser (a) uma string contendo o nome da funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
$cacheable e $cache_attrs podem ser omitidos na maioria dos casos. Veja Controlando modos de Sada Cache dos Plugins
para obter informaes apropriadas.
register_modifier
void register_modifier()(name, impl);
string name;
mixed impl;
Use isso para modificar dinamicamente plugins registrados. Passe no template o nome do modificador, seguido da funo
PHP que implemente isso.
A chamada da funo-php impl pode ser (a) uma strin contendo o nome da funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
101
Mtodos
register_object
void register_object()(object_name, $object, allowed methods/properties, format,
block methods);
string object_name;
object $object;
array allowed methods/properties;
boolean format;
array block methods;
Isso para registrar um objeto para uso no template. Veja a seo de objetos do manual para examplos.
register_outputfilter
void register_outputfilter()(function);
mixed function;
Use isso para registrar dinamicamente filtros de sada para operaes na sada do template antes de mostr-lo. Veja Filtros
de Sada de Templates para maiores informaes de como configurar uma funo de filtro de sada.
A chamada da funo-php function pode ser (a) uma string contendo um nome de funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
register_postfilter
void register_postfilter()(function);
mixed function;
Use isso para registrar dinamicamente psfiltros para rodar templates aps eles terem sido compilados. Veja psfiltros de
template para maiores informaes de como configurar funes de psfiltragem.
A chamada da funo-php function pode ser (a) uma string contendo um nome de funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
register_prefilter
void register_prefilter()(function);
mixed function;
Use isso para registrar prfiltros dinamicamente para rodar templates antes deles serem compilados. Veja template prefilters
para maiores informaes de como configurar uma funo de prfiltragem.
A chamada da funo-php function pode ser (a) uma string contendo um nome de funo ou (b) um array no formato array(&$object, $method) com &$object sendo uma referncia para um objeto e $method sendo uma string contendo
o nome do mtodo ou (c) um array no formato array(&$class, $method) com $class sendo um nome de classe e
$method sendo um mtodo desta classe.
register_resource
102
Mtodos
trigger_error
void trigger_error()(error_msg, level);
string error_msg;
[int level];
Essa funo pode ser usada para sada de uma mensagem de erro usando Smarty. O parmetro level pode ser um dos valores
usados para a funo de php trigger_error(), ex.: E_USER_NOTICE, E_USER_WARNING, etc. Por padro
E_USER_WARNING.
template_exists
bool template_exists()(template);
string template;
Essa funo checa se o template especificado existe. Isso pode aceitar um path para o template no filesystem ou um recurso
de string especificando o template.
unregister_block
void unregister_block()(name);
string name;
Use isso para desregistrar dinamicamente um bloco de funes de plugin. Passe no bloco o nome da funo.
unregister_compiler_function
void unregister_compiler_function()(name);
string name;
Use essa funo para desregistrar uma funo de compilador. Passe o nome da funo de compilador.
unregister_function
void unregister_function()(name);
103
Mtodos
string name;
Use isso para desregistrar dinamicamente uma funo de plugin do template. Passe no template o nome da funo.
unregister_modifier
void unregister_modifier()(name);
string name;
Use isso para desregistrar dincamimente um modificador de plugin. Passe no template o nome do modificador.
unregister_object
void unregister_object()(object_name);
string object_name;
Use isso para desregistrar um objeto.
unregister_outputfilter
void unregister_outputfilter()(function_name);
string function_name;
Use isso para desregistrar dinamicamente um filtro de sada.
unregister_postfilter
void unregister_postfilter()(function_name);
string function_name;
Use isso para dinamicamente desregistrar um psfiltro.
unregister_prefilter
void unregister_prefilter()(function_name);
string function_name;
Use isso para dinamicamente desregistrar um prfiltro.
unregister_resource
void unregister_resource()(name);
string name;
104
Mtodos
Use isso para dinamicamente desregistrar um recurso de plugin. Passe no parmetro nome o nome do recurso.
105
Configurando Caching
A primeira coisa a fazer habilitar o caching. Isso feito pela configurao $caching = true (or 1.)
Com caching habilitado, a chamada para a funo display('index.tpl') ir trazer o template como usual, mas tambm salva
uma cpia disso para o arquivo de sada (uma cpia de cache) in the $cache_dir. Na prxima chamada de display('index.tpl'), a cpia em cache ser usada ao invs de trazer novamente o template.
Notas Tcnicas: Os arquivos no $cache_dir so nomeados com similaridade ao nome do arquivo de template. Embora eles terminem com a extenso ".php", eles no so realmente scripts executveis de php. No edite estes arquivos!
Cada pgina em cache tem um perodo de tempo limitado determinado por $cache_lifetime. O padro do valor 3600 segundos, ou 1 hora. Aps o tempo expirar, o cache regerado. possvel dar tempos individuais para caches com seu prprio tempo de expirao pela configurao $caching = 2. Veja a documentao em $cache_lifetime para detalhes.
106
Caching
Se $compile_check est habilitado, cada arquivo de template e arquivo de configurao que est envolvido com o arquivo
em cache checado por modificaes. Se algum destes arquivos foi modificado desde que o ltimo cache foi gerado, o cache imediatamente regerado. Isso ligeiramente uma forma de optimizao de performance de overhead, deixe
$compile_check setado para false.
Se $force_compile est habilitado, os arquivos de cache iro sempre ser regerados. Isso efetivamente desativar caching.
$force_compile usualmente para propsitos de debug somente, um caminho mais eficiente de desativar caching setar o
$caching = false (ou 0.)
A funo is_cached() pode ser usada para testar se um template tem um cache vlido ou no. Se voc tem um template com
cache que requer alguma coisa como um retorno do banco de dados, voc pode usar isso para pular este processo.
Voc pode deixar partes da sua pgina dinmica com a funo de template insert. Vamos dizer que sua pgina inteira pode
ter cache exceto para um banner que mostrado abaixo do lado direito da sua pgina. Usando uma funo insert para o ban107
Caching
ner, voc pode deixar esse elemento dinmico dentro do contedo de cache. Veja a documentao em insert para detalhes e
exemplos.
Voc pode limpar todos os arquivos de cache com a funo clear_all_cache(), ou arquivos de cache individuais (ou grupos)
com a funo clear_cache().
Acima, ns estamos passando a varivel $my_cache_id para display() com o cache_id. Para cada valor nico de
$my_cache_id, um cache em separado ir ser gerado para index.tpl. Nesse exemplo, "article_id" foi passado em URL e
usado como o cache_id.
Notas Tcnicas: Tenha muito cuidado quando passar valores do cliente (web brownser) dentro da Smarty (ou alguma aplicao PHP.) Embora o exemplo acima usando o article_id vindo de uma URL parea fcil, isso poderia
ter consequncias ruins. O cache_id usado para criar um diretrio no sistema de arquivos, ento se o usurio decidir passar um valor extremamente largo para article_id, ou escrever um script que envia article_ids randmicos em
um ritmo rpido, isso poderia possivelmente causar problemas em nvel de servidor. Tenha certeza de limpar algum dado passado antes de usar isso. Nessa instncia, talvez voc saiba que o article_id tem um comprimento de
10 caracteres e isso constitudo somente de alfa-numricos, e deve ser um article_id vlido no database. Verifique
isso!
Tenha certeza de passar o mesmo cache_id como o segundo parmetro para is_cached() e clear_cache().
108
Caching
Voc pode limpar todos os caches para um cache_id em particular passando o primeiro parmetro null para clear_cache().
Desta maneira, voc pode "agrupar" seus caches juntos dando-lhes o mesmo cache_id.
Grupos de Cache
Voc pode fazer agrupamentos mais elaborados configurando grupos de cache_id. Isso realizado pela separao de cada
sub-grupo com uma barra vertical "|" no valor do cache_id. Voc pode ter muitos sub-grupos com voc desejar.
109
Caching
Notas Tcnicas: O agrupamento de cache id NO use o path do template como alguma parte do cache_id. Por
exemplo, se voc tem display('themes/blue/index.tpl'), voc no pode limpar o cache para tudo que estiver sob o diretrio "themes/blue". Se voc quiser fazer isso, voc deve agrup-los no cache_id, como display('themes/blue/index.tpl','themes|blue'); Ento voc pode limpar os caches para o tema azul com with clear_cache(null,'themes|blue');
O nmero de segundos at que o endtime de $obj alcana alteraes em cada display de pgina, mesmo que a pgina esteja
em cache. Desde o atributo endtime esteja em cache o objeto somente tem que ser puxado do banco de dados quando a pgina est escrita para o cache mas no em requisies subsequentes da pgina.
110
Caching
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}
Quando recarregado a pgina que voc ir notar que ambas as datas diferem. Uma "dinmica" e uma "esttica". Voc
pode fazer qualquer coisa entre as tags {dynamic}...{/dynamic} e ter certeza que isso no ir ficar em cache como o restante
da pgina.
111
Objetos
O Smarty permite acesso a objetos do PHP atravs de seus templates. H duas formas de acess-los. Uma forma registrar
objetos para o template, ento os acessa via sintaxe similar a funes customizveis. A outra forma atribuir objetos para os
templates e acess-los como se fossem uma varivel atribuda. O primeiro mtodo tem uma sintaxe de template muito mais
legal. E tambm mais segura, medida que um objeto registrado pode ser restrito a certos mtodos e propriedades. Entretanto, um objeto registrado no pode ser posto em loop ou ser atribuido em arrays de objetos, etc. O mtodo que voc escolher
ser determinado pelas suas necessidades, mas use o primeiro mtodo se possvel para manter um mnimo de sintaxe no
template.
Se a segurana est habilitada, nenhum dos mtodos privados ou funes podem acessados (comeando com "_"). Se um
mtodo e propriedade de um mesmo nome existir, o mtodo ser usado.
Voc pode restringir os mtodos e propriedades que podem ser acessados listando os em um array como o terceiro parmetro de registrao.
Por definio, parmetros passados para objetos atravs dos templates so passados da mesma forma que funes customizveis os obtm. Um array associativo passado como o primeiro parmetro, e o objeto smarty como o segundo. Se voc
quer que os parmetros passados um de cada vez por cada argumento como passagem de parmetro de objeto tradicional,
defina o quarto parmetro de registrao para falso.
O quinto parmetro opcional s tem efeito com format sendo true e contm uma lista de mtods de ob que seriam tratados
como blocos. Isso significa que estes mtodos tem uma tag de fechamento no template
({foobar->meth2}...{/foobar->meth2}) e os parmetros para os mtodos tem a mesma sinopse como os parmetros
para block-function-plugins: Eles pegam 4 parmetros $params, $content, &$smarty e &$repeat e eles tambm comportamse como block-function-plugins.
112
Advanced Features
$smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1'));
// Se voc quer usar o formato de parmetro de objeto tradicional, passe um booleano de false
$smarty->register_object("foobar",$myobj,null,false);
// Voc pode tambm atribuir objetos. Atribua por referncia quando possvel.
$smarty->assign_by_ref("myobj", $myobj);
$smarty->display("index.tpl");
?>
TEMPLATE:
{* accessa nosso objeto registrado *}
{foobar->meth1 p1="foo" p2=$bar}
{* voc pode tambm atribuir a sada *}
{foobar->meth1 p1="foo" p2=$bar assign="output"}
the output was {$output}
{* acessa nosso objeto atribudo *}
{$myobj->meth1("foo",$bar)}
Prefilters
Os prefilters de Template so funes de PHP nas quais seus templates so rodados antes de serem compilados. Isto bom
para preprocessamento de seus templates para remover comentrios indesejados, mantendo o olho no que as pessoas esto
colocando nos seus templates, etc. Prefilters podem ser ou registrado ou carregado do diretrio de plugins usando a funo
load_filter() ou pela configurao da varivel $autoload_filters. O Smarty passar o cdigo fonte do template como o primeiro argumeto, e espera a funo retornar o cdigo fonte do template resultante.
Postfilters
Os postfilters de template so funes de PHP nas quais seus templates so rodados imediatamente depois de serem compilados. Os postfilters podem ser ou registradocarrgados do diretrio de plugins usando a funo load_filter() ou pela varivel
de configurao $autoload_filters. O Smarty passar o cdigo fonte do template compilado como o primeiro argumento, e
espera a funo retornar o resultado do processamento.
113
Advanced Features
<?php
// ponha isto em sua aplicao
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... *}
Advanced Features
switch ($action) {
case 'read':
// save cache to database
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$C
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")) {
115
Advanced Features
Recursos (Resources)
Os templates podem vir de uma variedade de fontes. Quando voc exibe (display) ou busca (fetch) um template, ou inclui
um template de dentro de outro template, voc fornece um tipo de recurso, seguido pelo caminho e nome do template apropriado. Se um recurso no dado explicitamente o valor de $default_resource_type assumido.
116
Advanced Features
117
Advanced Features
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// faa 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 so seguros
return true;
}
function db_get_trusted($tpl_name, &$smarty_obj)
{
// no 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"}
118
Advanced Features
return true;
}
} else {
// no arquivo
return false;
}
}
// defina a manipuladora padro
$smarty->default_template_handler_func = 'make_template';
?>
119
funes
modificadores
funes de bloco
funes de compilador
prefiltros
posfiltros
filtros de sada
recursos
inserir
Com a exceo de recursos, a compatibilidade com a forma antiga de funes de manipulador de registro via register_* API
preservada. Se voc no usou o API mas no lugar disso modificou as variveis de classe $custom_funcs,
$custom_mods, e outras diretamente, ento voc vai precisar ajustar seus scripts para ou usar API ou converter suas funcionalidade customizadas em plugins.
Convenes de Aparncia
120
Arquivos e funes de Plugin devem seguir uma conveno de aparncia muito especfica a fim de ser localizada pela
Smarty.
Os arquivos de plugin devem ser nomeados da sequinte forma:
tipo.nome.php
function
modifier
block
compiler
prefilter
postfilter
outputfilter
resource
insert
Escrevendo Plugins
Os Plugins podem ser ou lidos pela Smarty automaticamente do sistema de arquivos ou eles podem ser registrados no tempo
de execuo via uma das funes de API register_* . Eles podem tambm ser com o uso da funo API unregister_* .
Para os plugins que so registrados no tempo de execuo, o nome da(s) funo(es) de plugin no tm que seguir a conveno de aparncia.
Se um plugin depende de alguma funcionalidade fornecida por um outro plugin (como o caso com alguns plugins embutidos com a Smarty), ento a forma apropriada para ler o plugin necessrio esta:
require_once $smarty->_get_plugin_filepath('function', 'html_options');
Como uma regra geral, o objeto da Smarty sempre passado para os plugins como o ltimo parmetro (com duas excees:
modificadores no passam o objeto da Smarty em tudo e blocks passam &$repeat depois do objeto da Smarty para manter
compatibilidade a antigas verses da Smarty).
Funes de Template
void smarty_function_name()($params, &$smarty);
array $params;
object &$smarty;
121
Todos os atributos passados para as funes de template a partir do template esto contidas em $params como um array associativo. Ou acessa esses valores diretamente i.e $params['start'] ou usa extract($params) para import-los para
dentro da tabela smbolo.
A sada (valor de retorno) da funo ser substituda no lugar da tag da funo no template (a funo fetch(), por exemplo).
Alternativamente, a funo pode simplesmente executar alguma outra tarefa sem ter alguma sada (a funo assign()).
Se a funo precisa passar valores a algumas variveis para o template ou utilizar alguma outra funcionalidade fornecida
com a Smarty, ela pode usar o objeto $smarty fornecido para fazer isso.
Veja tambm: register_function(), unregister_function().
122
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);
}
?>
Modifiers
Modificadores so funes que so aplicadas a uma varivel no template antes dela ser mostrada ou usada em algum outro
contexto. Modificadores podem ser encadeados juntos.
mixed smarty_modifier_name()($value, $param1);
mixed $value;
[mixed $param1, ...];
O primeiro parmetro para o plugin midificador o valor em que o modificador suposto operar. O resto dos parmetros
podem ser opcionais, dependendo de qual tipo de operao para ser executada.
O modificador deve retornar o resultado de seu processamento.
Veja tambm: register_modifier(), unregister_modifier().
123
* 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;
}
?>
Block Functions
void smarty_block_name()($params, $content, &$smarty);
array $params;
mixed $content;
object &$smarty;
Funes de Block so funes da forma: {func} .. {/func}. Em outras palavras, ele enclausura um bloco de template e opera
no contedo deste bloco. Funes de Block tem precedncia sobre funes customizadas com mesmo nome, assim, voc
no pode ter ambas, funo customizvel {func} e funo de Bloco {func} .. {/func}.
Por definio a implementao de sua funo chamada duas vezes pela Smarty: uma vez pela tag de abertura, e outra pela
tag de fechamento (veja &$repeat abaixo para como mudar isto).
Apenas a tag de abertura da funo de bloco pode ter atributos. Todos os atributos passados para as funes de template esto contidos em $params como um array associativo. Voc pode ou acessar esses valores diretamente, i.e.
$params['start'] ou usar extract($params) para import-los para dentro da tabela smbolo. Os atributos da tag de
abertura so tambm acessveis a sua funo quando processando a tag de fechamento.
O valor da varivel $content depende de que se sua funo chamada pela tag de fechamento ou de abertura. Caso seja a de
abertura, ele ser null, se for a de fechamento o valor ser do contedo do bloco de template. Note que o bloco de template
j ter sido processado pela Smarty, ento tudo que voc receber sada do template, no o template original.
O parmetro &$repeat passado por referncia para a funo de implementao e fornece uma possibilidade para ele controlar quantas vezes o bloco mostrado. Por definio $repeat true na primeira chamada da block-function (a tag de
abertura do bloco) e false em todas as chamadas subsequentes funo de bloco (a tag de fechamento do bloco). Cada vez
que a implementao da funo retorna com o &$repeat sendo true, o contedo entre {func} .. {/func} avaliado e a implementao da funo chamada novamente com o novo contedo do bloco no parmetro $content.
Se voc tem funes de bloco aninhadas, possvel descobrir qual a funo de bloco pai acessando a varivel
$smarty->_tag_stack. Apenas faa um var_dump() nela e a estrutura estaria visvel.
See also: register_block(), unregister_block().
<?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;
}
}
Funes Compiladoras
Funes compiladoras s so chamadas durante a compilao do template. Elas so teis para injeo de cdigo PHP ou
contedo esttico time-sensitive dentro do template. Se h ambos, uma funo compiladora e uma funo customizvel registrada sob o mesmo nome, a funo compiladora tem precedncia.
mixed smarty_compiler_name()($tag_arg, &$smarty);
string $tag_arg;
object &$smarty;
funo compiladora so passados dois parmetros: a tag string de argumento da tag - basicamente, tudo a partir do nome
da funo at o delimitador de fechamento, e o objeto da Smarty. suposto que retorna o cdigo PHP para ser injetado dentro do template compilado.
See also register_compiler_function(), unregister_compiler_function().
125
<php
echo 'index.tpl compiled at 2002-02-20 20:02';
?>
Prefiltros/Posfiltros
Plugins Prefilter e postfilter so muito similares em conceito; onde eles diferem na execuo -- mais precisamente no tempo de suas execues.
string smarty_prefilter_name()($source, &$smarty);
string $source;
object &$smarty;
Prefilters so usados para processar o fonte do template imediatamente antes da compilao. O primeiro parmetro da funo de prefilter o fonte do template, possivelmente modificado por alguns outros prefilters. O Plugin suposto retornar o
fonte modificado. Note que este fonte no salvo em lugar nenhum, ele s usado para a compilao.
string smarty_postfilter_name()($compiled, &$smarty);
string $compiled;
object &$smarty;
Postfilters so usados para processar a sada compilada do template (o cdigo PHP) imediatamente aps a compilao ser
feita e antes do template compilado ser salvo no sistema de arquivo. O primeiro parmetro para a funo postfilter o cdigo do template compilado, possivelmente modificado por outros postfilters. O plugin suposto retornar a verso modificada
deste cdigo.
126
Filtros de sada
Filtros de sada operam na sada do template, depois que o template lido e executado, mas antes a sada mostrada.
string smarty_outputfilter_name()($template_output, &$smarty);
string $template_output;
object &$smarty;
O primeiro parmetro para a funo do filtro de sada a sada do template que precisa ser processada, e o segundo parmetro a instncia da Smarty invocando o plugin. O plugin deve fazer o precessamento e retornar os resultados.
Recursos (Resources)
Os plugins de Recursos so como uma forma genrica de fornecer cdigos fontes de template ou componentes de script
PHP para a Smarty. Alguns exemplos de recursos: banco de dados, LDAP, memria compartilhada, sockets, e assim por diante.
H um total de 4 funes que precisam estar registradas para cada tipo de recurso. Cada funo receber o recurso requisitado como o primeiro parmetro e o objeto da Smarty como o ltimo parmetro. O resto dos parmetros dependem da funo.
bool smarty_resource_name_source()($rsrc_name, &$source, &$smarty);
string $rsrc_name;
string &$source;
object &$smarty;
bool smarty_resource_name_timestamp()($rsrc_name, &$timestamp, &$smarty);
string $rsrc_name;
int &$timestamp;
object &$smarty;
bool smarty_resource_name_secure()($rsrc_name, &$smarty);
string $rsrc_name;
object &$smarty;
bool smarty_resource_name_trusted()($rsrc_name, &$smarty);
string $rsrc_name;
object &$smarty;
A primeira funo deve devolver o recurso. Seu segundo parmetro uma varivel passada por referncia onde o resultado
127
seria armazenado. A funo deve retornar true se ela est apta a devolver com sucesso o recurso e caso contrrio retorna
false.
A segunda funo deve devolver a ltima modificao do recurso requisitado (como um timestamp Unix). O segundo parmetro uma varivel passada por referncia onde o timestamp seria armazenado. A funo deve retornar true se o timestamp poderia ser determinado com sucesso, e caso contrrio retornaria false.
A terceira funo deve retornar true ou false, dependendo do recurso requisitado est seguro ou no. Esta funo usada
apenas para recursos de template mas ainda assim seria definida.
A quarta funo deve retornar true ou false, dependendo do recurso requisitado ser confivel ou no. Esta funo usada
apenas para componentes de script PHP requisitados pelas tags include_php ou insert com o atributo src. Entretanto, ela
ainda assim mesmo seria definida para os recursos de template.
Veja tambm: register_resource(), unregister_resource().
128
{
// no usado para templates
}
?>
Inserts
Plugins Insert so usados para implementar funes que so invocadas por tags insert no template.
string smarty_insert_name()($params, &$smarty);
array $params;
object &$smarty;
O primeiro parmetro para a funo um array associativo de atributos passados para o insert. Ou acessa esses valores diretamente, i.e. $params['start'] ou usa extract($params) para import-los para dentro da tabela smbolo.
A funo insert deve retornar o resultado que ser substitudo no lugar da tag insert no template.
129
130
Erros do Smarty/PHP
O Smarty pode obter muitos erros, tais como: atributos de tags perdidos ou nomes de variveis mal formadas. Se isto acontece, voc ver um erro similar ao seguir:
O Smarty te mostra o nome do template, o nmero da linha e o erro. Depois disso, o erro consiste do nmero da linha da
classe Smarty em que o erro ocorreu.
H certos erros que o Smarty no consegue detectar, tais como uma tag de fechamento errada. Estes tipos de erro geralmente acabam gerando erros em tempo de processamento do interpretador de erros do PHP.
Quando voc encontra um erro de anlise do PHP, o nmero da linha do erro corresponder ao script PHP compilado, no o
template em si. Normalmente voc pode no template localizar o erro de sintaxe. Aqui algumas coisas para voc procurar:
falta de fechamento de tags para {if}{/if} ou {section}{/section}, ou erro de lgica dentro de uma tag {if}. Se voc no conseguir encontrar o erro, talvez seja necessrio abrir o arquivo PHP compilado e ir at o nmero da linha exibido, para saber
onde se encontra o erro correspondente no template.
131
132
Quando a pgina for extrada, o ttulo da "Pgina Principal" passado ao template 'cabecalho.tpl', e ser imediatamente usado como ttulo da pgina. Quando a pgina de arquivos extrada, o ttulo muda para "Arquivos". No que no exemplo de arquivos, ns estamos usando uma varivel que vem do arquivo 'pagina_arquivos.conf' ao invs de uma varivel definida no
cdigo. Note tambm que "BC News" mostrado somente se a varivel $titulo no conter valor algum, isto feito usandose o modificador de variveis padro.
Datas
Em geral, sempre envie datas ao Smarty no formato timestamp. Deste modo o desginer do template pode usar o modificador
date_format para ter um controle total sobre a formatao da data, e tambm facilita a comparao de datas se necessrio.
Nota: No Smarty 1.4.0, voc pode enviar datas ao Smarty no formato unix timestamp, mysql timestamp, ou qualer outra data que possa ser lida pela funo strtotime().
133
Ir mostrar:
Jan 4, 2001
{$startDate|date_format:"%Y/%m/%d"}
Ir mostrar:
2001/01/04
{if $data1 < $data2}
...
{/if}
Quando se est usando {html_select_date} em um template, o programador normalmente vai querer converter a sada de um
formulrio de volta para o formato timestamp. Abaixo est uma funo que ir ajud-lo fazer isto.
WAP/WML
Os templates WAP/WML exigem um cabealho com o tipo de contedo (Content-Type) PHP para serem passados junto
com o template. O modo mais fcil de se fazer isso seria escrever uma funo personalizada que envia-se este cabealho. Se
voc est usando cache, isto no ir funcionar, ento ns faremos isso usando a tag insert (lembre-se que tags de insert no
so guardadas no cache!). Certifique-se de que nada enviado ao navegador antes do template, caso contrrio o cabealho
no ir funcionar.
134
if (empty($params['content'])) {
return;
}
header($params['content']);
return;
}
?>
seu template do Smarty deve comear com a tag insert, veja o exemplo seguir:
{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 fcil isso, no ?
</p>
</card>
</wml>
Templates componentizados
Tradicionalmente, programar templates para suas aplicaes feito da seguinte maneira: Primeiro, voc guardar suas variveis junto com a aplicao PHP, (talvez obtendo-as de consultas banco de dados). Aps, voc instancia seu objeto Smarty,
atribui valores s variveis e mostra o template. Digamos que ns temos um registrador de estoque em nosso template. Ns
coletaramos os dados do estoque em nossa aplicao, e ento atriburiamos valores as variveis referentes ele no template
e depois exibiramos o template na tela. Agora no seria legal se voc pudesse adicionar este registrador de esto em qualquer aplicao simplesmente incluindo um template nela, e sem se preocupar com a busca dos dados futuramente?
Voc pode fazer isto escrevendo um plugin personalizado que obteria o contedo e atribuiria ele uma varivel definida no
template.
135
Nota tcnica: Este mtodo no 100% a prova de falha. Um spammer poderia criar um programa para coletar o email e decodificar estes valores, mas muito pouco provvel.
136
137
138