Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Table of Contents
Prefcio .......................................................................................................................... xii
I. Iniciando ........................................................................................................................ 1
1. O que o Smarty? .................................................................................................. 3
2. Instalao .............................................................................................................. 5
Requisitos ......................................................................................................... 5
Instalao Bsica ................................................................................................ 5
Estendendo a configurao ................................................................................... 9
II. Smarty para Designers de Template ................................................................................. 11
3. Sintaxe Bsica ...................................................................................................... 14
Comentrios ..................................................................................................... 14
Funes ........................................................................................................... 14
Atributos ......................................................................................................... 15
Colocando Variveis em Aspas Duplas ................................................................. 16
Matemtica ...................................................................................................... 16
Escapando da interpretao do Smarty .................................................................. 16
4. Variveis ............................................................................................................. 18
Variveis definidas do PHP ................................................................................ 18
Associative arrays ..................................................................................... 18
ndices de Matrizes ................................................................................... 19
Objetos ................................................................................................... 20
Variveis carregadas de arquivos de configurao ................................................... 20
A varivel reservada {$smarty} ........................................................................... 22
Variveis Request ..................................................................................... 22
{$smarty.now} ......................................................................................... 22
{$smarty.const} ........................................................................................ 22
{$smarty.capture} ..................................................................................... 23
{$smarty.config} ....................................................................................... 23
{$smarty.section}, {$smarty.foreach} ........................................................... 23
{$smarty.template} .................................................................................... 23
{$smarty.ldelim} ....................................................................................... 23
{$smarty.rdelim} ...................................................................................... 23
5. Modificadores de variveis ..................................................................................... 24
capitalize ......................................................................................................... 24
count_characters ............................................................................................... 25
cat .................................................................................................................. 26
count_paragraphs .............................................................................................. 26
count_sentences ................................................................................................ 27
count_words ..................................................................................................... 27
date_format ...................................................................................................... 28
default ............................................................................................................ 30
escape ............................................................................................................. 30
indent ............................................................................................................. 31
lower .............................................................................................................. 32
nl2br ............................................................................................................... 33
regex_replace ................................................................................................... 33
replace ............................................................................................................ 34
spacify ............................................................................................................ 35
string_format .................................................................................................... 36
strip ................................................................................................................ 36
strip_tags ......................................................................................................... 37
truncate ........................................................................................................... 37
iii
iv
104
105
105
105
105
105
106
106
106
106
106
106
106
107
107
107
107
108
108
108
108
108
108
108
109
109
109
109
109
110
110
110
110
110
110
110
110
111
111
111
112
112
113
113
113
114
114
115
115
115
116
117
118
118
vi
118
119
119
120
120
121
122
122
122
122
123
123
123
124
124
124
124
125
125
125
125
125
126
126
128
130
130
133
133
134
135
135
136
138
138
138
139
141
142
142
142
143
143
145
147
148
149
150
151
154
155
157
157
159
vii
159
159
159
160
162
163
164
166
167
List of Examples
2.1. Arquivos da biblioteca do Smarty necessrios .................................................................... 5
2.2. Cria uma instncia do Smarty ......................................................................................... 5
2.3. Definir a constante SMARTY_DIR manualmente ............................................................... 6
2.4. Adicionar o diretrio da biblioteca para o include_path do PHP ............................................ 6
2.5. Defina a constante SMARTY_DIR manualmente ............................................................... 6
2.6. Exemplo de estrutura de arquivo ..................................................................................... 7
2.7. Configurando permisses de arquivos .............................................................................. 7
2.8. Editando /web/www.example.com/smarty/guestbook/templates/index.tpl ................................. 8
2.9. Editando /web/www.example.com/docs/guestbook/index.php ................................................ 8
2.10. Editando /php/includes/guestbook/setup.php ................................................................... 10
2.11. Editando /web/www.example.com/docs/guestbook/index.php ............................................. 10
3.1. Comentrios ............................................................................................................... 14
3.2. Sintaxe de funes ...................................................................................................... 15
3.3. Sintaxe de atributos de funes ..................................................................................... 15
3.4. Sintaxe entre aspas ...................................................................................................... 16
3.5. Exemplos de matemtica .............................................................................................. 16
3.6. Exemplo de modificar os delimitadores .......................................................................... 17
4.1. Variveis definidas ...................................................................................................... 18
4.2. Acessando variveis de matriz associativa ....................................................................... 19
4.3. Acesando matrizes por seus ndices ................................................................................ 20
4.4. Acessando propriedades de objetos ................................................................................ 20
4.5. Variveis de configurao ............................................................................................ 21
4.6. Mostrando vriveis request ......................................................................................... 22
4.7. Usando {$smarty.now} ................................................................................................ 22
4.8. Usando {$smarty.const} ............................................................................................... 23
5.1. Exemplo de modificador .............................................................................................. 24
5.2. capitalize ................................................................................................................... 25
5.3. count_characters ......................................................................................................... 25
5.4. cat ............................................................................................................................ 26
5.5. count_paragraphs ........................................................................................................ 26
5.6. count_sentences .......................................................................................................... 27
5.7. count_words .............................................................................................................. 27
5.8. date_format ................................................................................................................ 28
5.9. date_format conversion specifiers .................................................................................. 29
5.10. default ..................................................................................................................... 30
5.11. escape ..................................................................................................................... 31
5.12. indent ...................................................................................................................... 32
5.13. lower ...................................................................................................................... 33
5.14. nl2br ....................................................................................................................... 33
5.15. regex_replace ........................................................................................................... 34
5.16. replace .................................................................................................................... 35
5.17. spacify .................................................................................................................... 35
5.18. string_format ............................................................................................................ 36
5.19. strip ........................................................................................................................ 37
5.20. strip_tags ................................................................................................................. 37
5.21. truncate ................................................................................................................... 38
5.22. upper ...................................................................................................................... 39
5.23. wordwrap ................................................................................................................ 40
6.1. combinando modificadores ........................................................................................... 41
7.1. capturando contedo do template ................................................................................... 42
7.2. Funo config_load ..................................................................................................... 44
viii
ix
113
114
114
114
115
115
116
116
117
118
118
118
119
119
119
120
121
121
123
124
124
125
126
127
127
128
128
129
129
130
130
131
132
134
135
135
136
137
138
138
139
140
141
144
145
146
146
148
149
150
150
151
153
154
xi
157
157
158
159
159
160
161
162
163
164
165
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...
xii
Part I. Iniciando
Table of Contents
1. O que o Smarty? ..........................................................................................................
2. Instalao ......................................................................................................................
Requisitos .................................................................................................................
Instalao Bsica ........................................................................................................
Estendendo a configurao ...........................................................................................
3
5
5
5
9
O que o Smarty?
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.
Suporte de caching embutido.
Fontes de template arbitrrios.
Funes de manipulao de cache customizadas.
Arquitetura de Plugin.
Chapter 2. Instalao
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 subdiretrio /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.
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/internals/*.php (all of them)
/plugins/*.php (todos eles para ser seguro, talvs a sua pagina precise de apenas a
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
Agora que os arquivos da biblioteca esto no lugar, hora de configurar os diretrios do Smarty para a
sua aplicao.
O Smarty necessita de quatro diretrios, que so chamados por padro 'templates/',
'templates_c/', 'configs/' e 'cache/'.
Cada um deles pode ser definido pelas propriedades da classe Smarty $template_dir,
$compile_dir, $config_dir, e $cache_dir repectivamente. altamente recomendado que
voc configure um conjunto diferente destes diretrios para cada aplicao que for usar 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/".
Instalao
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 web para que 'index.php' possa ser idendificado como o
ndice padro do diretrio, asssim se voc acessar http://www.example.com/guestbook/, o script
'index.php' ser executado sem adicionar 'index.php' na URL. No Apache voc pode configurar
isto adicioanando "index.php" ao final da sua configurao DirectoryIndex (separe cada item com
um espao.) como no exemplo de httpd.conf
DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
Vamos dar uma olhada na estrutura de arquivos at agora:
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty.class.php
/usr/local/lib/php/Smarty-v.e.r/libs/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty-v.e.r/libs/Config_File.class.php
/usr/local/lib/php/Smarty-v.e.r/libs/debug.tpl
/usr/local/lib/php/Smarty-v.e.r/libs/internals/*.php
/usr/local/lib/php/Smarty-v.e.r/libs/plugins/*.php
/web/www.example.com/smarty/guestbook/templates/
/web/www.example.com/smarty/guestbook/templates_c/
/web/www.example.com/smarty/guestbook/configs/
/web/www.example.com/smarty/guestbook/cache/
/web/www.example.com/docs/guestbook/index.php
O Smarty ir precisar de acesso de escrita (usurios de windows por favor ignorem) em $compile_dir e
$cache_dir, ento tenha certesa que o usurio do servidor web possa escrever. 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.
Instalao
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.
{* Smarty *}
Ola! {$name}, bem vindo ao Smarty!
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 vamos criar uma instancia do Smarty, assign(definir) uma varivel
do template e display (mostrar) o arquivo 'index.tpl'.
<?php
// load Smarty library
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
Instalao
Nota Tcnica
No nosso exemplo, ns estamos definindo caminhos absolutor para todos os diretrios do Smarty.
Se /web/www.example.com/smarty/guestbook/ estiver dentro do seu include_path
do PHP, ento estas definies no so necessrias. Entretando, mais eficinte e (com
experincia) causa menos erros definir como caminhos absolutos. Isto faz ter certeza que o Smarty
esta lendo os arquivos dos diretrios que voc quer.
Agora carregue o arquivo index.php em seu navegador. Voc veria "Ol, Thomas! bem vindo ao
Smarty"
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
<?php
// Carrega a biblioteca Smarty
require('Smarty.class.php');
//
//
//
//
=
=
=
=
'/web/www.example.com/smarty/guestbook/templates/';
'/web/www.example.com/smarty/guestbook/templates_c/';
'/web/www.example.com/smarty/guestbook/configs/';
'/web/www.example.com/smarty/guestbook/cache/';
$this->caching = true;
$this->assign('app_name', 'Guest Book');
}
}
?>
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.
10
Table of Contents
3. Sintaxe Bsica ..............................................................................................................
Comentrios .............................................................................................................
Funes ...................................................................................................................
Atributos .................................................................................................................
Colocando Variveis em Aspas Duplas .........................................................................
Matemtica ..............................................................................................................
Escapando da interpretao do Smarty ..........................................................................
4. Variveis .....................................................................................................................
Variveis definidas do PHP ........................................................................................
Associative arrays .............................................................................................
ndices de Matrizes ...........................................................................................
Objetos ...........................................................................................................
Variveis carregadas de arquivos de configurao ...........................................................
A varivel reservada {$smarty} ...................................................................................
Variveis Request .............................................................................................
{$smarty.now} .................................................................................................
{$smarty.const} ................................................................................................
{$smarty.capture} .............................................................................................
{$smarty.config} ...............................................................................................
{$smarty.section}, {$smarty.foreach} ...................................................................
{$smarty.template} ............................................................................................
{$smarty.ldelim} ...............................................................................................
{$smarty.rdelim} ..............................................................................................
5. Modificadores de variveis .............................................................................................
capitalize .................................................................................................................
count_characters .......................................................................................................
cat ..........................................................................................................................
count_paragraphs ......................................................................................................
count_sentences ........................................................................................................
count_words .............................................................................................................
date_format ..............................................................................................................
default ....................................................................................................................
escape .....................................................................................................................
indent .....................................................................................................................
lower ......................................................................................................................
nl2br .......................................................................................................................
regex_replace ...........................................................................................................
replace ....................................................................................................................
spacify ....................................................................................................................
string_format ............................................................................................................
strip ........................................................................................................................
strip_tags .................................................................................................................
truncate ...................................................................................................................
upper ......................................................................................................................
wordwrap ................................................................................................................
6. Combinando Modificadores .............................................................................................
7. Funes internas ...........................................................................................................
capture ....................................................................................................................
config_load ..............................................................................................................
foreach,foreachelse ....................................................................................................
iteration ...........................................................................................................
12
14
14
14
15
16
16
16
18
18
18
19
20
20
22
22
22
22
23
23
23
23
23
23
24
24
25
26
26
27
27
28
30
30
31
32
33
33
34
35
36
36
37
37
38
39
41
42
42
43
44
46
first ................................................................................................................ 46
last ................................................................................................................. 46
show ............................................................................................................... 46
total ................................................................................................................ 47
include .................................................................................................................... 47
include_php ............................................................................................................. 48
insert ...................................................................................................................... 49
if,elseif,else .............................................................................................................. 50
ldelim,rdelim ............................................................................................................ 53
literal ...................................................................................................................... 53
php ......................................................................................................................... 54
section,sectionelse ..................................................................................................... 54
index .............................................................................................................. 59
index_prev ....................................................................................................... 59
index_next ....................................................................................................... 60
iteration ........................................................................................................... 61
first ................................................................................................................ 61
last ................................................................................................................. 62
rownum ........................................................................................................... 63
loop ................................................................................................................ 63
show ............................................................................................................... 64
total ................................................................................................................ 65
strip ........................................................................................................................ 65
8. Funes Personalizadas .................................................................................................. 67
assign ..................................................................................................................... 67
counter .................................................................................................................... 67
cycle ....................................................................................................................... 68
debug ...................................................................................................................... 69
eval ........................................................................................................................ 69
fetch ....................................................................................................................... 71
html_checkboxes ...................................................................................................... 71
html_image .............................................................................................................. 73
html_options ............................................................................................................ 75
html_radios .............................................................................................................. 77
html_select_date ....................................................................................................... 78
html_select_time ....................................................................................................... 83
html_table ............................................................................................................... 86
math ....................................................................................................................... 87
mailto ..................................................................................................................... 89
popup_init ............................................................................................................... 91
popup ..................................................................................................................... 91
textformat ................................................................................................................ 96
9. Arquivos de Configurao .............................................................................................. 99
10. Debugging Console .................................................................................................... 100
13
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.
{* Smarty *}
{* inclua o arquivo de cabealho aqui *}
{include file="cabecalho.tpl"}
{include file=$arquivoInclude}
{include file=#arquivoInclude#}
{* mostra lista dropdown *}
<select name="empresa">
{html_options values=$vals selected=$selected output=$output}
</select>
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"}.
14
Sintaxe Bsica
{config_load file="cores.conf"}
{include file="cabecalho.tpl"}
{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.
{include file="cabecalho.tpl"}
{include file=$arquivoInclude}
{include file=#arquivoInclude#}
{html_select_date display_days=yes}
<select name="empresa">
{html_options values=$vals selected=$selected output=$output}
</select>
15
Sintaxe Bsica
EXEMPLOS DE SINTAXE:
{func var="teste $foo teste"}
{func var="teste $foo_bar teste"}
{func var="teste $foo[0] teste"}
{func var="teste $foo[bar] teste"}
{func var="teste $foo.bar teste"}
{func var="teste `$foo.bar` teste"}
<-<-<-<-<-<--
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
{cycle values="one,two,`$smarty.config.myval`"} <-- deve conter apstrofos
Matemtica
Matemtica pode ser aplicada diretamente aos valores de variveis.
{$foo+1}
{$foo*$bar}
{* alguns exemplos mais complicados *}
{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
{if ($foo+$bar.test%$baz*134232+10+$b+10)}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}
16
Sintaxe Bsica
A coisa mais simples evitar a situao em s separando o seu cdigo Javascript e CSS nos seus prprios
arquivos e ento usar os mtodos padres do HTML para acessa-los.
Incluir contedo literal possvel usando blocos {literal} .. {/literal}. De modo similar ao uso de entidades
HTML, voc pode usar {ldelim},{rdelim} ou {$smarty.ldelim} para mostrar os delimitadores atuais.
As vezes conveniente simplesmente mudar $left_delimiter e $right_delimiter.
<?php
$smarty = new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
?>
Aonde example.tpl :
17
Chapter 4. Variveis
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).
18
Variveis
ndices de Matrizes
Voc pode referencia matrizes pelo seu ndice, muito parecido com a sintaxe nativa do PHP.
19
Variveis
Objetos
Propriedades de objetos definidos do PHP podem ser referenciados especificando-se o nome da
propriedade depois do smbolo '->'.
20
Variveis
foo.conf:
{config_load file="foo.conf"}
<html>
<title>{$smarty.config.pageTitle}</title>
<body bgcolor="{$smarty.config.bodyBgColor}">
<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgCo
<tr bgcolor="{$smarty.config.rowBgColor}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
21
Variveis
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.
{$smarty.const}
Voc pode acessar o valor de constantes PHP diretamente.
22
Variveis
{$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}.
23
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 modificadores 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.
24
Modificadores de variveis
count_characters
Posio do
Parmetro
Tipo
Requerido
Padro
boolean
No
false
Descrio
Isto
determina
quando incluir ou
no os espaos
em
branco
na
contagem.
25
Modificadores de variveis
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.
26
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.
27
Modificadores de variveis
date_format
Posio do
Parmetro
Tipo
Requerido
Padro
Descrio
string
No
%b %e, %Y
Este o formato
para
a
data
mostrada.
string
No
n/a
Isto formata a data e hora no formato strftime() indicado. Datas podem ser passadas para o Smarty
como timestamps unix, 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.
{$smarty.now|date_format}
{$smarty.now|date_format:"%A, %B %e, %Y"}
{$smarty.now|date_format:"%H:%M:%S"}
{$yesterday|date_format}
{$yesterday|date_format:"%A, %B %e, %Y"}
{$yesterday|date_format:"%H:%M:%S"}
MOSTRA:
Feb 6, 2001
Tuesday, February 6, 2001
14:33:00
Feb 5, 2001
Monday, February 5, 2001
14:33:00
28
%h - o mesmo que %b
Modificadores
variveisum relgio de 24 horas (intervalo de 00 a 2
%H - hora como um nmero
decimal deusando
%U - nmero da semana do ano atual como um nmero decimal, comeando com o primeiro
%V - nmero da semana do ano atual como um nmero decimal de acordo com The ISO 860
intervalo de 01 a 53, aonde a semana 1 a primeira semana que tenha pelo menos qua
%w - dia da semana como decimal, domingo sendo 0
%W - nmero da semana do ano atual como nmero decimal, comeando com a primeira se
%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 `%'
29
Modificadores de variveis
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.
escape
Posio do
Parmetro
Tipo
Requerido
Valores
Possveis
Padro
string
html,htmlall,url,quotes,hex,hexentity,javascript
No
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.
30
Modificadores de variveis
{$articleTitle}
{$articleTitle|escape}
{$articleTitle|escape:"html"}
{* escapa & " ' < > *}
{$articleTitle|escape:"htmlall"} {* escapa todas as entidades html *}
{$articleTitle|escape:"url"}
{$articleTitle|escape:"quotes"}
<a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a
MOSTRA:
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.)
31
Modificadores de variveis
lower
Isto usado para converter para minsculas uma varivel.
32
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
Esta a expresso
regular
a
ser
substituda.
string
Sim
n/a
Esta a string
que ir substituir a
expresso regular.
33
Descrio
Modificadores de variveis
Uma expresso regular para localizar e substituir na varivel. Use a sintaxe para preg_replace() do manual
do PHP.
replace
Posio do
Parmetro
Tipo
Requerido
Padro
string
Sim
n/a
string
Sim
n/a
34
Descrio
Modificadores de variveis
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.
35
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.
36
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
37
Descrio
Este determina para
quantos caracteres
truncar.
Modificadores de variveis
Posio do
Parmetro
Tipo
Requerido
Padro
Descrio
string
No
...
Este o texto
para adicionar se
truncar.
boolean
No
false
Isto
determina
quando truncar ou
no ao final de
uma palavra(false),
ou no caractere
exato (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.
38
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
determina
quando quebrar ou
no ao final de uma
palavra (false), ou
no caractere exato
(true).
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.
39
Modificadores de variveis
40
index.php:
<?php
$smarty = new Smarty;
$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.
$smarty->display('index.tpl');
?>
index.tpl:
{$articleTitle}
{$articleTitle|upper|spacify}
{$articleTitle|lower|spacify|truncate}
{$articleTitle|lower|truncate:30|spacify}
{$articleTitle|lower|spacify|truncate:30:". . ."}
Smokers
S M O K
s m o k
s m o k
s m o k
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. . .
41
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 . . .
C U T S
E F F
c u t s...
capture
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
default
O nome do bloco
capturado
assign
string
No
n/a
O nome da varivel
para dar o valor da
sada capturada
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.
Caution
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.
{* ns no queremos mostrar uma linha de tabela no ser que haja contedo para el
{capture name=banner}
{include file="pegar_banner.tpl"}
{/capture}
{if $smarty.capture.banner ne ""}
<tr>
<td>
{$smarty.capture.banner}
</td>
</tr>
{/if}
42
Funes internas
config_load
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
file
string
Sim
n/d
O nome do arquivo
de
configurao
para incluir
section
string
No
n/d
O nome da seo a
carregar
scope
string
No
local
tratado, o qual
deve ser um entre
local, parent ou
global. local indica
que as variveis
so
carregadas
no contexto do
template
local
apenas.
parent
indica
que
as
variveis
so
carregadas
no
contexto atual e
no template que
o chamou. global
indica
que
as
variveis
esto
disponveis
para
todos os templates.
global
boolean
No
No
Quando ou no
as variveis so
visiveis para o
template
superior(aquele que
chamou
este),
o
mesmo
que
scope=parent.
NOTA:
este
atributo
esta
obsoleto devido ao
atributo scope, mas
ainda suportado.
Se
scope
for
indicado, este valor
ignorado.
Esta funo usada para carregar as variveis de um arquivo de configurao dentro de um template. Veja
Arquivos de Configurao para mais informaes.
43
Funes internas
{config_load file="cores.conf"}
<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
from
string
Sim
n/d
44
Descrio
O
nome
da
matriz que voc
estar pegando os
elementos
Funes internas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
item
string
Yes
n/d
O nome da varivel
que o elemento
atual
key
string
No
n/d
O nome da varivel
que a chave atual
name
string
No
n/d
O nome do loop
foreach para acessar
as
propriedades
foreach
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 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>
45
Funes internas
$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
*}
{foreach name=outer item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{/foreach}
{/foreach}
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
first definido como true se a interao atual do foreach for a primeira.
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.
46
Funes internas
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
O nome de uma
varivel que ir
conter toda a sada
do template
[var ...]
[var type]
No
n/d
Varivel
para
passar localmente
para o template
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.
{include file="cabecalho.tpl"}
{* O contedo do template vem aqui *}
{include file="rodape.tpl"}
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.
47
Funes internas
{* caminho absoluto *}
{include file="/usr/local/include/templates/cabecalho.tpl"}
{* caminho absoluto (idem) *}
{include file="file:/usr/local/include/templates/cabecalho.tpl"}
{* caminho absoluto do windows (DEVE usar o prefixo "file:") *}
{include file="file:C:/www/pub/templates/cabecalho.tpl"}
{* incluir a partir do recurso de template chamado "db" *}
{include file="db:header.tpl"}
include_php
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
file
string
Sim
n/a
O nome do arquivo
php a incluir
once
boolean
No
true
Quando incluir ou
no o arquivo php
mais de uma vez
se includo vrias
vezes
assign
string
No
n/a
O nome da varivel
que receber a sada
do arquivo php
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.
48
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.
load_nav.php
------------<?php
// carrega variveis de um banco de dados mysql e define elas para o template
require_once("MySQL.class.php");
$sql = new MySQL;
$sql->query("select * from site_nav_sections order by name",SQL_ALL);
$this->assign('sections',$sql->record);
?>
index.tpl
--------{* caminho absoluto ou relativo a $trusted_dir *}
{include_php file="/caminho/para/load_nav.php"}
{foreach item="curr_section" from=$sections}
<a href="{$curr_section.url}">{$curr_section.name}</a><br>
{/foreach}
insert
Nome do Atributo
Tipo
Obrigatrio
Padro
name
string
Sim
n/d
O nome da funo
insert (insert_name)
assign
string
No
n/d
O nome da varivel
que ir receber a
sada
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
Varivel
para
passar para a funo
insert
49
Descrio
Funes internas
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.
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.
50
Funes internas
Qualificador
Alternativas
Exemplo
sintaxe
==
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 % $b == 0
$a is not even
[not]
an
even $a % 2 == 0
number (unary)
is [not] div by
is [not] even
is [not] even by
is [not] odd
is [not] odd by
de Significado
Equivalente
PHP
no
51
{* parenteses so permitidos *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
...
{/if}
{* voc pode tambm colocar funes php *}
{if count($var) gt 0}
...
{/if}
{* testa
{if $var
...
{/if}
{if $var
...
{/if}
{if $var
...
{/if}
is odd}
is not odd}
52
Funes internas
ldelim,rdelim
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}.
{literal}
<script language=javascript>
<!-function isblank(field) {
if (field.value == '')
{ return false; }
else
{
document.loginform.submit();
return true;
}
}
// -->
</script>
{/literal}
53
Funes internas
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.
{php}
// incluindo um script php
// diretamente no template.
include("/caminho/para/condicoes_do_tempo.php");
{/php}
section,sectionelse
Nome do atributo
Tipo
Obrigatrio
Padro
name
string
Sim
n/d
O nome da seo
loop
[$variable_name]
Sim
n/d
O nome da varivel
para
determinar
o
nmero
de
interaes
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
O valor do passo
que ser usado
para
percorrer
a
matriz.
Por
exemplo, step=2 ir
percorrer os ndices
54
Descrio
Funes internas
Nome do atributo
Tipo
Obrigatrio
Padro
Descrio
0,2,4, etc. Se
for negativo,
ir caminhar
matriz de trs
frente.
step
ele
pela
para
max
integer
No
Define o nmero
mximo de loops
para a section.
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'.
MOSTRA:
id: 1000<br>
id: 1001<br>
id: 1002<br>
55
Funes internas
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>
56
Funes internas
{* sections podem ser aninhadas at o nvel que voc quiser. Com sections aninhadas
voc pode acessar complexas estruturas de dados, tais como matrizes multi-dimens
Neste exemplo, $contact_type[customer] uma matriz contendo os tipos de contato
do consumidor atualmente selecionado. *}
{section name=customer loop=$custid}
id: {$custid[customer]}<br>
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>
57
Funes internas
MOSTRA:
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.
58
Funes internas
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.
59
Funes internas
MOSTRA:
0 id:
O
1 id:
O
2 id:
O
1000<br>
id do consumidor ir mudar<br>
1001<br>
id do consumidor ir mudar<br>
1002<br>
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:
O
1 id:
O
2 id:
O
1000<br>
id do consumidor ir mudar<br>
1001<br>
id do consumidor ir mudar<br>
1002<br>
id do consumidor ir mudar<br>
60
Funes internas
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:
first
first definido como true se a interao atual da section a primeira.
61
Funes internas
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.
62
Funes internas
<table>
<tr><td>0 id: 1000</td></tr>
<tr><td>1 id: 1001</td></tr>
<tr><td>2 id: 1002</td></tr>
</table>
rownum
rownum usado para mostrar a interao atual do loop, comeando em um. um sinnimo de iteration,
eles exercem a mesma funo.
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.
63
Funes internas
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.
1 id: 1000<br>
2 id: 1001<br>
3 id: 1002<br>
a section foi mostrada.
64
Funes internas
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.
65
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.
66
assign
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
var
string
Sim
n/a
O nome da varivel
que est sendo
definida
value
string
Yes
n/a
assign usado para definir o valor de uma varivel de template durante a execuo do template.
counter
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
A direo para
contar (up/down)
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
67
Funes Personalizadas
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.
{* inicia a contagem *}
{counter start=0 skip=2 print=false}
{counter}<br>
{counter}<br>
{counter}<br>
{counter}<br>
MOSTRA:
2<br>
4<br>
6<br>
8<br>
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
O delimitador para
usar 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.
68
Funes Personalizadas
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
69
Descrio
Varivel (ou string)
para avaliar
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
assign
string
No
n/a
Descrio
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.
setup.conf
---------emphstart = <b>
emphend = </b>
title = Welcome to {$company}'s home page!
ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
ErrorState = You must supply a {#emphstart#}state{#emphend#}.
index.tpl
--------{config_load file="setup.conf"}
{eval var=$foo}
{eval var=#title#}
{eval var=#ErrorCity#}
{eval var=#ErrorState# assign="state_error"}
{$state_error}
MOSTRA:
This is the contents of foo.
Welcome to Foobar Pub & Grill's home page!
You must supply a <b>city</b>.
You must supply a <b>state</b>.
70
Funes Personalizadas
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 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
71
Descrio
O nome da lista
checkbox
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
values
array
n/a
Uma matriz de
valores para os
botes checkbox
output
array
n/a
selected
string/array
No
empty
O(s) elemento(s)
checkbox
marcado(s)
options
matriz
Sim, a menos
que esteja usando
values e output
n/a
Uma
matriz
associativa
de
valores e sada
separator
string
No
empty
string de texto
para separar cada
checkbox
labels
boolean
No
true
Adicionar
tags
<label> para na
sada
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 options. Toda a sada compatvel com XHTML.
Todos os parmetro que no estejam na lista acima so mostrados como pares nome/valor dentro de cada
tag <input> criada.
72
Funes Personalizadas
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Charl
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_checkboxes', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
type="checkbox"
type="checkbox"
type="checkbox"
type="checkbox"
name="checkbox[]"
name="checkbox[]"
name="checkbox[]"
name="checkbox[]"
value="1000"
value="1001"
value="1002"
value="1003"
/>Joe Schmoe</label><b
checked="checked" />Ja
/>Jane Johnson</label>
/>Charlie Brown</label
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
73
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
height
string
No
altura atual
da imagem
width
string
No
largura atual
da imagem
basedir
string
No
doc root
do servidor
diretrio de base a
caminhos relativos
alt
string
No
""
href
string
No
n/a
Descrio
descrio
alternativa
imagem
da
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.
74
Funes Personalizadas
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->display('index.tpl');
index.tpl:
{html_image file="pumpkin.jpg"}
{html_image file="/path/from/docroot/pumpkin.jpg"}
{html_image file="../path/relative/to/currdir/pumpkin.jpg"}
MOSTRA: (possvel)
html_options
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
values
array
Sim, a menos
que usando
atributos de options
n/a
uma matriz de
valores para o menu
dropdown
output
array
Sim, a menos
que usando
atributos de options
n/a
uma matriz de
sada para o menu
dropdown
selected
string/array
No
empty
o elemento do
options selecionado
options
associative array
Sim, a menos
que usando
values e output
n/a
uma
matriz
associativa
de
output e output
name
string
No
empty
nome do grupo
selecionado
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.
75
Funes Personalizadas
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Carlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
<select name=customer_id>
{html_options values=$cust_ids selected=$customer_id output=$cust_names}
</select>
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_options', array(
1001 => 'Taniel Franklin',
1002 => 'Fernando Correa',
1003 => 'Marcelo Pereira',
1004 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
<select name=customer_id>
{html_options options=$cust_options selected=$customer_id}
</select>
76
Funes Personalizadas
html_radios
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
name
string
No
radio
values
array
Sim, a menos
que utilizando
atributo de options
n/a
uma matriz de
valores para radio
buttons
output
array
Sim, a menos
que utilizando
atributo de options
n/a
checked
string
No
empty
O elemento do radio
marcado
options
associative array
Sim, a menos
que utilizando
values e output
n/a
uma
matriz
associativa
de
values e output
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.
77
Funes Personalizadas
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane
Johnson','Carlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('cust_radios', array(
1001 => 'Joe Schmoe',
1002 => 'Jack Smith',
1003 => 'Jane Johnson',
1004 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
$smarty->display('index.tpl');
index.tpl:
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
78
Descrio
Com o que prefixar
o nome da varivel
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
do unix ou
YYYY-MM-DD
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
da mesma forma
que start_year
o ltimo ano no
menu dropdown, ou
o nmero do ano, ou
relativo ao ano atual
(+/- N)
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
mostra os anos na
ordem reversa
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
month_size
string
No
null
adiciona o atributo
de tamanho para a
79
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
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
adiciona atributos
extras para todas as
tags select/input se
forem dadas
day_extra
string
No
null
adiciona atributos
extras para todas as
tags select/input se
forem dadas
month_extra
string
No
null
adiciona atributos
extras para todas as
tags select/input se
forem dadas
year_extra
string
No
null
adiciona atributos
extras para todas as
tags select/input se
forem dadas
field_order
string
No
MDY
a ordem para se
mostrar os campos
field_separator
string
No
\n
string
exibida
entre os diferentes
campos
month_value_format
string
No
%m
formato
strftime
dos valores do ms,
o padro %m para
nmero de ms.
year_empty
string
No
null
Se for fornecido
ento o primeiro
eleemento
do
select-box
'anos'
ter este nome e
o valor "". Isto
til para fazer o
select-box ler "Por
favor selecione um
ano" por exemplo.
Note que voc pode
usar valores como
"-MM-DD" como
atributos de tempo
para indicar um ano
no selecionado.
80
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
month_empty
string
No
null
Caso
fornecido
ento o primeiro
elemento do selectbox 'meses' ter este
nome e o valor
"". Note que voc
pode suar valores
como
"YYYY-DD" como atributos
de tempo para
indicar meses no
selecionados.
day_empty
string
No
null
Caso
fornecido
ento o primeiro
elemento do selectbox 'dias' ter este
nome e o valor
"". Note que voc
pode usar valores
como
"YYYYMM-"
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.
81
Funes Personalizadas
{html_select_date}
82
Funes Personalizadas
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
Exibir ou no no
formato (am/pm)
83
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
use_24_hours
booleano
No
true
Usar ou no relgio
de 24 horas
minute_interval
inteiro
No
intervalo
dos
nmeros
dos
minutos do menu
dropdown
second_interval
integer
No
intervalo
dos
nmeros
dos
segundos do menu
dropdown
field_array
string
No
n/a
all_extra
string
No
null
adiciona atributos
extras para tags
select/input
se
fornecidas
hour_extra
string
No
null
adiciona atributos
extras para tags
select/input
se
fornecidas
minute_extra
string
No
null
adiciona atributos
extras para tags
select/input tags se
fornecidas
second_extra
string
No
null
adiciona atributos
extras para tags
select/input
se
fornecidas
meridian_extra
string
No
null
adiciona atributos
extras para tags
select/input
se
fornecidas
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.
84
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
Funes Personalizadas
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option
Example value="12">12</option>
8.12. html_select_time
<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>
85
Funes Personalizadas
html_table
Nome do atributo
Tipo
Obrigatrio
Padro
Descrio
loop
array
Sim
n/d
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
direao de uma
linha
para
ser
representada.
Possveis valores:
left/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.
86
Funes Personalizadas
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('data',array(1,2,3,4,5,6,7,8,9));
$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
$smarty->display('index.tpl');
index.tpl:
{html_table loop=$data}
{html_table loop=$data cols=4 table_attr='border="0"'}
{html_table loop=$data cols=4 tr_attr=$tr}
MOSTRA:
<table border="1">
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
<table border="0">
<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</table>
<table border="1">
<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp
</table>
math
Nome do atributo
Tipo
Obrigatrio
Padro
equation
string
Sim
n/a
a equao ser
executar
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
87
Descrio
Funes Personalizadas
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.
88
Funes Personalizadas
{* $height=4, $width=5 *}
{math equation="x + y" x=$height y=$width}
MOSTRA:
9
mailto
Nome do Atributo
Tipo
Obrigatrio
Padro
address
string
Sim
n/d
O endereo
email
text
string
No
n/d
O texto ser
exibido, o padro
o endereo de email
89
Descrio
de
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
encode
string
No
none
cc
string
No
n/d
Endereo de e-mail
para mandar uma
cpia carbono(cc).
Separe os endereos
por vrgula.
bcc
string
No
n/d
subject
string
No
n/d
Assunto do e-mail.
newsgroups
string
No
n/d
newsgroup
para
postar.
Separe
os endereos por
vrgula.
followupto
string
No
n/d
Endereo
para
acompanhar.
Separe os endereos
por vrgula.
extra
string
No
n/d
Qualquer
outra
informao
que
voc queira passar
para o link, como
classes de planilhas
de estilo
mailto automatiza o processo de criao de links de e-mail e opcionalmente codifica eles. Codificar o email 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.
90
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:
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
91
Descrio
O text/html para
mostrar na janela
popup
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
trigger
string
No
onMouseOver
O que usado
para fazer a janela
aparecer. Pode ser
onMouseOver ou
onClick
sticky
boolean
No
false
caption
string
No
n/d
fgcolor
string
No
n/d
bgcolor
string
No
n/d
A cor da borda da
caixa popup
textcolor
string
No
n/d
Define a cor do
texto dentro da
caixa popup
capcolor
string
No
n/d
Define a cor do
ttulo da caixa
closecolor
string
No
n/d
Define a cor do
texto para fechar
textfont
string
No
n/d
Define a cor do
texto para ser usado
no texto principal
captionfont
string
No
n/d
closefont
string
No
n/d
textsize
string
No
n/d
Define a fonte do
texto principa
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
Define a largura da
caixa
height
integer
No
n/d
Define a altura da
caixa
left
boolean
No
false
right
boolean
No
false
Faz os popups ir
para a diresita do
mouse
92
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
center
boolean
No
false
Faz os popups ir
para o centro do
mouse
above
boolean
No
false
Faz os popups
irem para acima
do mouse. NOTA:
somente possvel se
height foi definido
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
Define
uma
imagem para usar
ao invs de uma cor
dentro do popup.
bgbackground
url to image
No
n/d
closetext
string
No
n/d
Define o texto
"Close"
para
qualquer outra coisa
noclose
boolean
No
n/d
No mostra o texto
"Close" em coladas
com um ttulo
93
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
status
string
No
n/d
Define o texto na
barra de status do
browser
autostatus
boolean
No
n/d
Define o texto da
barra de status para
o texto do popup.
NOTA: sobrescreve
a definio de status
autostatuscap
string
No
n/d
define o texto da
barra de status
como
o
texto
do ttulo NOTA:
sobrescreve o status
e autostatus
inarray
integer
No
n/d
Indica ao overLib
para
ler
o
texto deste ndice
na matriz ol_text
array,
localizada
em overlib.js. Este
parmetro pode ser
usado ao invs do
texto
caparray
integer
No
n/d
capicon
url
No
n/d
Mostra a imagem
antes do ttulo
snapx
integer
No
n/d
snapy
integer
No
n/d
fixx
integer
No
n/d
fixy
integer
No
n/d
background
url
No
n/d
Define
uma
imagem para ser
94
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
usada como fundo
ao invs da tabela
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
Permite a voc
controlar o html
sobre a figura de
fundo
completamente. O
cdigo
HTML
esperado no
atributo "text"
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
Faz
com
que
o popup funcione
como um tooltip.
Ir aparecer apenas
aps um certo
atraso
em
milsimos
de
segundo
hauto
boolean
No
n/d
Determina
automaticamente se
95
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
o
popup
deve
aparecer a esquerda
ou direita do mouse.
vauto
boolean
No
n/d
Determina
automaticamente se
o
popup
deve
aparecer abaixo ou
acima do mouse.
textformat
Nome do Atributo
Tipo
Obrigatrio
Padro
style
string
No
n/d
estilo pr-definido
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)
O caractere (ou
string de caracteres)
para indenta
wrap
number
No
80
Quantidade
de
caracteres antes de
quebrar cada linha
wrap_char
string
No
\n
O caractere (ou
string de caracteres)
para usar para
quebrar cada linha
wrap_cut
boolean
No
false
Se true, wrap ir
quebrar a linha no
caractere exato em
96
Descrio
Funes Personalizadas
Nome do Atributo
Tipo
Obrigatrio
Padro
Descrio
vez de quebrar ao
final da palavra
assign
string
No
n/d
A
varivel
de
template que ir
receber a sada
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".
97
This is foo.
This is bar.
Funes Personalizadas
bar foo bar foo
foo.
bar foo bar foo
foo.
bar
foo bar
foo.
Example
8.18.foo
textformat
bar foo bar foo
foo.
bar foo bar foo
foo.
bar foo bar foo
foo.
bar foo bar 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.
98
# variveis globais
tituloPagina = "Menu Principal"
corfundoPagina = #000000
corfundoTabela = #000000
corlinhaTabela = #00ff00
[Consumidor]
tituloPagina = "Informaes do Consumidor"
[Login]
tituloPagina = "Login"
focus = "nomeusuario"
Intro = """Este um valor que ultrapassa uma
linha. Voc deve coloc-lo
dentre trs aspas."""
# seo invisvel
[.BancoDeDados]
host=meu.dominio.com
bd=LIVRODEVISITAS
usuario=usuario-php
senha=foobar
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.
99
Nota Tcnica
O console de debug no funciona quando voc usa a API fetch(), somente quando voc estiver
usando display(). Isto um conjunto de comandos em javascript adicionados ao final do template
gerado. Se voc no gosta de javascript, voc pode editar o template debug.tpl para exibir sada no
formato que voc quiser. Dados do debug no so armazenados em cache e os dados do debug.tpl
no so inclusos no console de debug.
Note
O tempo de carregamento de cada template e arquivo de configurao so exibidos em segundos,
ou ento fraes de segundo.
100
Table of Contents
11. Constantes ................................................................................................................
SMARTY_DIR .......................................................................................................
12. Variveis ..................................................................................................................
$template_dir ..........................................................................................................
$compile_dir ..........................................................................................................
$config_dir .............................................................................................................
$plugins_dir ...........................................................................................................
$debugging ............................................................................................................
$debug_tpl .............................................................................................................
$debugging_ctrl ......................................................................................................
$autoload_filters ......................................................................................................
$compile_check ......................................................................................................
$force_compile .......................................................................................................
$caching ................................................................................................................
$cache_dir .............................................................................................................
$cache_lifetime .......................................................................................................
$cache_handler_func ................................................................................................
$cache_modified_check ............................................................................................
$config_overwrite ....................................................................................................
$config_booleanize ..................................................................................................
$config_read_hidden ................................................................................................
$config_fix_newlines ...............................................................................................
$default_template_handler_func .................................................................................
$php_handling ........................................................................................................
$security ................................................................................................................
$secure_dir .............................................................................................................
$security_settings ....................................................................................................
$trusted_dir ............................................................................................................
$left_delimiter ........................................................................................................
$right_delimiter ......................................................................................................
$compiler_class ......................................................................................................
$request_vars_order .................................................................................................
$request_use_auto_globals ........................................................................................
$error_reporting ......................................................................................................
$compile_id ...........................................................................................................
$use_sub_dirs .........................................................................................................
$default_modifiers ...................................................................................................
$default_resource_type .............................................................................................
13. Mtodos ...................................................................................................................
append ..................................................................................................................
append_by_ref ........................................................................................................
assign ....................................................................................................................
assign_by_ref .........................................................................................................
clear_all_assign .......................................................................................................
clear_all_cache .......................................................................................................
clear_assign ............................................................................................................
clear_cache ............................................................................................................
clear_compiled_tpl ..................................................................................................
clear_config ...........................................................................................................
config_load ............................................................................................................
display ..................................................................................................................
102
104
104
105
105
105
105
105
106
106
106
106
106
106
106
107
107
107
107
108
108
108
108
108
108
108
109
109
109
109
109
110
110
110
110
110
110
110
110
111
111
111
112
112
113
113
113
114
114
115
115
115
fetch .....................................................................................................................
get_config_vars .......................................................................................................
get_registered_object ...............................................................................................
get_template_vars ....................................................................................................
is_cached ...............................................................................................................
load_filter ..............................................................................................................
register_block .........................................................................................................
register_compiler_function ........................................................................................
register_function .....................................................................................................
register_modifier .....................................................................................................
register_object ........................................................................................................
register_outputfilter ..................................................................................................
register_postfilter ....................................................................................................
register_prefilter ......................................................................................................
register_resource .....................................................................................................
trigger_error ...........................................................................................................
template_exists .......................................................................................................
unregister_block ......................................................................................................
unregister_compiler_function .....................................................................................
unregister_function ..................................................................................................
unregister_modifier ..................................................................................................
unregister_object .....................................................................................................
unregister_outputfilter ..............................................................................................
unregister_postfilter .................................................................................................
unregister_prefilter ..................................................................................................
unregister_resource ..................................................................................................
14. Caching ....................................................................................................................
Configurando Caching .............................................................................................
Multiple Caches Per Page .........................................................................................
Grupos de Cache .....................................................................................................
Controlling Cacheability of Plugins' Output .................................................................
15. Advanced Features .....................................................................................................
Objetos ..................................................................................................................
Prefilters ................................................................................................................
Postfilters ...............................................................................................................
Output Filters (Filtros de Sada) .................................................................................
Funo Manipuladora de Cache .................................................................................
Recursos (Resources) ...............................................................................................
Templates partindo do $template_dir ..................................................................
Templates partindo de qualquer diretrio .............................................................
Templates partindo de outras fontes ....................................................................
Funo Manipuladora de Template Padro ...........................................................
16. Extendendo a Smarty com Plugins ................................................................................
Como os Plugins Funcionam .....................................................................................
Convenes de Aparncia .........................................................................................
Escrevendo Plugins .................................................................................................
Funes de Template ...............................................................................................
Modifiers ...............................................................................................................
Block Functions ......................................................................................................
Funes Compiladoras .............................................................................................
Prefiltros/Posfiltros ..................................................................................................
Filtros de sada .......................................................................................................
Recursos (Resources) ...............................................................................................
Inserts ...................................................................................................................
103
116
117
118
118
118
119
119
120
120
121
122
122
122
122
123
123
123
124
124
124
124
125
125
125
125
125
126
126
128
130
130
133
133
134
135
135
136
138
138
138
139
141
142
142
142
143
143
145
147
148
149
150
151
154
104
Notas Tcnicas
No recomendado colocar este diretrio sob um diretrio document root do seu webserver.
$compile_dir
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.
105
Variveis
$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.
$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.
106
Variveis
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.
$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 builtin 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.
107
Variveis
$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
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.
SMARTY_PHP_PASSTHRU - Smarty echos tags as-is.
SMARTY_PHP_QUOTE - Smarty quotes the tags as html entities.
SMARTY_PHP_REMOVE - Smarty ir remover as tags do template.
SMARTY_PHP_ALLOW - Smarty ir executar as tags como cdigos PHP.
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
108
Variveis
$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.
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 "}".
109
Variveis
$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.
$error_reporting
Quando este valor definido para um valor no nulo, o seu valor usado como o nvel de error_reporting
[http://php.net/error_reporting] do php dentro de display() e fetch(). Quando debugging esta ativado este
valor ignorado e o nvel de erro mantido intocado.
Veja tambm trigger_error(), debugging e Troubleshooting.
$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
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.
110
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;
111
Mtodos
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.
assign_by_ref
void assign_by_ref(varname, var);
string varname;
mixed var;
112
Mtodos
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.
clear_assign
void clear_assign(var);
string var;
113
Mtodos
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.
114
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
115
Mtodos
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().
fetch
string fetch(string template,
116
Mtodos
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().
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.
117
Mtodos
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.
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);
118
Mtodos
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.
load_filter
void load_filter(type, name);
string type;
string name;
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;
119
Mtodos
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.
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);
120
Mtodos
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.
121
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 mostrlo. 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.
122
Mtodos
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
void register_resource(name, resource_funcs);
string name;
array resource_funcs;
Use isso para registrar dinamicamente um recurso de plugin com a Smarty. Passe no nome o recurso e o
array de funes PHP que implementam isso. Veja template resources para maiores informaes de como
configurar uma funo para retornar templates.
Notas Tcnicas
Um nome de recurso deve ter ao menos dois caracteres de comprimento. Um caracter do nome
de recurso ir ser ignorado e usado como parte do path do arquivo como, $smarty->display('c:/
path/to/index.tpl');
A funo-php-array resource_funcs deve ter 4 ou 5 elementos. Com 4 elementos os elementos so
as functions-callbacks para as respectivas funes "source", "timestamp", "secure" e "trusted" de recurso.
Com 5 elementos o primeiro elemento tem que ser um objeto por referncia ou um nome de classe do
objeto ou uma classe implementando o recurso e os 4 elementos seguintes tem que ter os nomes de mtodos
implementando "source", "timestamp", "secure" e "trusted".
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);
123
Mtodos
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);
string name;
Use isso para desregistrar dinamicamente uma funo de plugin do template. Passe no template o nome
da funo.
// ns no queremos que designers template tenham acesso aos nossos arquivos do sis
$smarty->unregister_function("fetch");
unregister_modifier
void unregister_modifier(name);
string name;
Use isso para desregistrar dincamimente um modificador de plugin. Passe no template o nome do
modificador.
124
Mtodos
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;
Use isso para dinamicamente desregistrar um recurso de plugin. Passe no parmetro nome o nome do
recurso.
125
Configurando Caching
A primeira coisa a fazer habilitar o caching. Isso feito pela configurao $caching = true (or 1.)
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.
126
Caching
127
Caching
128
Caching
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().
129
Caching
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 subgrupos com voc desejar.
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');
130
Caching
Quando registrando um plugin com $cacheable=false o plugin chamado todo o tempo na pgina que est
sendo mostrada, sempre se a pgina vier do cache. A funo de plugin tem um comportamento levemente
como uma funo insert.
Em contraste para {insert} o atributo para o plugin no est em cache por padro. Eles podem ser declarados
para serem cacheados com o quarto parmetro $cache_attrs. $cache_attrs um array de nomes
de atributos que devem ser cacheados, ento a funo de plugin pega o valor como isso sendo o tempo que
a pgina foi escrita para o cache todo o tempo isso buscado do cache.
index.tpl:
Tempo restante: {remain endtime=$obj->endtime}
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.
131
Caching
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.
132
133
Advanced Features
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.
134
Advanced Features
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.
135
Advanced Features
136
switch ($action) {
case 'read':
Advanced Features
// save cache to database
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$Ca
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler:
query failed.");
Example
15.5. exemplo usando MySQL como uma fonte de cache
}
$row = mysql_fetch_array($results,MYSQL_ASSOC);
if($use_gzip && function_exists("gzuncompress")) {
$cache_contents = gzuncompress($row["CacheContents"]);
} else {
$cache_contents = $row["CacheContents"];
}
$return = $results;
break;
case 'write':
// save cache to database
if($use_gzip && function_exists("gzcompress")) {
// compress the contents for storage efficiency
$contents = gzcompress($cache_content);
} else {
$contents = $cache_content;
}
$results = mysql_query("replace into CACHE_PAGES values(
'$CacheID',
'".addslashes($contents)."')
");
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
case 'clear':
// clear cache info
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
// clear them all
$results = mysql_query("delete from CACHE_PAGES");
} else {
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
}
if(!$results) {
$smarty_obj->_trigger_error_msg("cache_handler: query failed.");
}
$return = $results;
break;
default:
// error, unknown action
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
$return = false;
break;
}
mysql_close($link);
return $return;
}
?>
137
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.
138
Advanced Features
Note
Note que voc pode ativar manualmente o recurso de arquivo embutido, mas no pode fornecer
um recurso que busca templates a partir do sistema de arquivos de alguma outra forma registrando
sob um outro nome de recurso. file resource, but you can provide a resource that fetches
templates from the file system in some other way by registering under another resource name.
139
Advanced Features
// no script PHP
// ponha 15.9.
estas
funes
em algum
lugar de sua aplicao
Example
usando
recursos
customizveis
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
// faa o banco de dados chamar aqui para buscar o seu template,
// preenchendo o $tpl_source
$sql = new SQL;
$sql->query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// 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"}
140
Advanced Features
141
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
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
Onde tipo um dos seguintes tipos de plugin:
function
142
modifier
block
compiler
prefilter
postfilter
outputfilter
resource
insert
resource.db.php,
As funes de plugin dentro dos arquivos do plugin devem ser nomeadas da seguinte forma:
smarty_tipo, _nome
O significado de tipo e nome so os mesmos de antes.
A Smarty mostrar mensagens de erro apropriadas se o arquivo de plugins que necessrio no
encontrado, ou se o arquivo ou a funo de plugin esto nomeadas inadequadamente.
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:
Funes de Template
void smarty_function_name($params, &$smarty);
array $params;
object &$smarty;
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.
143
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().
144
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().
145
146
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().
147
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().
148
<?php
/*
* Smarty plugin
* ------------------------------------------------------------* File:
compiler.tplheader.php
* Type:
compiler
* Name:
tplheader
* Purpose: Output header containing the source file name and
*
the time it was compiled.
* ------------------------------------------------------------*/
function smarty_compiler_tplheader($tag_arg, &$smarty)
{
return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'
}
?>
Esta funo pode ser chamada em um template da seguinte forma:
{* esta funo executada somente no tempo de compilao *}
{tplheader}
O cdigo PHP resultante no template compilado seria algo assim:
<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.
149
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.
150
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 seria armazenado. A funo deve retornar true se ela est apta a devolver com sucesso
o recurso e caso contrrio retorna false.
151
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().
152
153
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.
154
Table of Contents
17. Localizao de Erros ..................................................................................................
Erros do Smarty/PHP ...............................................................................................
18. Dicas & Truques .......................................................................................................
Manipulao de Varivel Vazia .................................................................................
Manipulao do valor padro de uma Varivel .............................................................
Passando a varivel titulo para o template de cabealho ..................................................
Datas ....................................................................................................................
WAP/WML ............................................................................................................
Templates componentizados ......................................................................................
Ofuscando endereos de E-mail .................................................................................
19. Recursos ...................................................................................................................
20. BUGS ......................................................................................................................
156
157
157
159
159
159
159
160
162
163
164
166
167
157
Localizao de Erros
The $template_dir is incorrect, doesn't exist or the file index.tpl is not in the templates/
directory
A {config_load} function is within a template (or config_load() has been called) and either
$config_dir is incorrent , does not exist or site.conf is not in the directory.
Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist,
or is not a directory...
Either the $compile_dir is incorrectly set, the directory does not exist, or templates_c is a file and
not a directory.
The $compile_dir is not writable by the web server. See the bottom of the installing smarty page for
permissions.
Fatal error: Smarty error: the $cache_dir 'cache' does not exist,
or is not a directory. in /..
This means that $caching is enabled and either; the $cache_dir is incorrectly set, the directory does not
exist, or cache is a file and not a directory.
This means that $caching is enabled and the $cache_dir is not writable by the web server. See the bottom
of the installing smarty page for permissions.
See also debugging, $error_reporting and trigger_error().
158
{* Se o $titulo estava vazio, ele agora contm o valor "sem titulo" quando voc exi
{$titulo}
159
paginaprincipal.tpl
-----------{include file="cabecalho.tpl" titulo="Pgina Principal"}
{* O contedo do template vem aqui *}
{include file="rodape.tpl"}
arquivos.tpl
-----------{config_load file="pagina_arquivos.conf"}
{include file="cabecalho.tpl" titulo=#tituloPaginaArquivos#}
{* O contedo do template vem aqui *}
{include file="rodape.tpl"}
cabecalho.tpl
---------<HTML>
<HEAD>
<TITLE>{$title|default:"BC News"}</TITLE>
</HEAD>
<BODY>
footer.tpl
---------</BODY>
</HTML>
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 usando-se 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().
160
{$startDate|date_format}
Ir mostrar:
Jan 4, 2001
{$startDate|date_format:"%Y/%m/%d"}
Ir mostrar:
2001/01/04
161
<?php
// presume-se que os elementos de seu formulrio so chamados de
// startDate_Day, startDate_Month, startDate_Year
$startDate = makeTimeStamp($startDate_Year,$startDate_Month,$startDate_Day);
function makeTimeStamp($year="",$month="",$day="")
{
if(empty($year))
$year = strftime("%Y");
if(empty($month))
$month = strftime("%m");
if(empty($day))
$day = strftime("%d");
return mktime(0,0,0,$month,$day,$year);
}
?>
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.
162
<?php
// certifique-se que o apache est configurado para reconhecer extenses .wml!
// coloque esta funo em algum lugar de seu aplicativo, ou no arquivo Smarty.addon
function insert_header($params)
{
// esta funo espera o argumento $content
if (empty($params['content'])) {
return;
}
header($params['content']);
return;
}
?>
seu template do Smarty deve comear com a tag insert, veja o exemplo seguir:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wm
<!-- 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,
163
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.
<?php
// coloque o arquivo "function.load_ticker.php" no diretrio plugin
// configura nossa funo para pegar os dados do estoque
function fetch_ticker($symbol)
{
// coloque a lgica que obtm os dados de
// algum recurso e guarde na varivel $ticker_info
return $ticker_info;
}
function smarty_function_load_ticker($params, &$smarty)
{
// chama a funo
$ticker_info = fetch_ticker($params['symbol']);
// atribuite o valor uma varivel no template
$smarty->assign($params['assign'], $ticker_info);
}
?>
index.tpl
--------{* Smarty *}
{load_ticker symbol="YHOO" assign="ticker"}
Nome no estoque: {$ticker.name} Preo no estoque: {$ticker.price}
164
problema, voc pode fazer seu endereo de E-mail aparecer em javascript misturado em cdigo HTML,
e ainda assim ele ir aparecer e funcionar corretamente no navegador. Isto feito com o plugin chamado
'mailto'.
index.tpl
--------envia informaes para
{mailto address=$EmailAddress encode="javascript" subject="Ol"}
Nota tcnica
Este mtodo no 100% a prova de falha. Um spammer poderia criar um programa para coletar
o e-mail e decodificar estes valores, mas muito pouco provvel.
165
166
167