What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Nome do atributo | Tipo | Obrigatório | Padrão | Descrição |
---|---|---|---|---|
name | string | Sim | n/d | O nome da seção |
loop | [$variable_name] | Sim | n/d | O nome da variável para determinar o número de interações |
start | integer | Não | 0 | A posição do índice que a seção vai começar. Se o valor é negativo, a posição 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 inválidos (valores fora do tamanho da matriz) são automaticamente corrigidos para o valor válido mais próximo. |
step | integer | Não | 1 | O valor do passo que será usado para percorrer a matriz. Por exemplo, step=2 irá percorrer os índices 0,2,4, etc. Se step for negativo, ele irá caminhar pela matriz de trás para frente. |
max | integer | Não | 1 | Define o número máximo de loops para a section. |
show | boolean | Não | true | Determina quando mostrar ou não esta section |
Os 'sections' de template são usados para percorrer os dados de uma matriz. Todas as tags section devem ser finalizadas com /section. Os parâmetros obrigatórios são name e loop. O nome da 'section' pode ser o que você quiser, contendo letras, números e sublinhados. As 'sections' podem ser aninhadas, e os nomes das sections devem ser únicos. A variável 'loop' (normalmente uma matriz de valores) determina o número de vezes que a section será percorrida. Quando estiver exibindo uma variável dentro de uma section, o nome da section deve estar ao lado da variável dentro de conchetes []. sectionelse é executado quando não houver valores na variável 'loop'.
Example 7.15. section
{* este exemplo irá mostrar todos os valores da matriz $custid *} {section name=consumidor loop=$custid} id: {$custid[consumidor]}<br> {/section}
MOSTRA:
id: 1000<br> id: 1001<br> id: 1002<br>
Example 7.16. loop de variável section
{* a variável 'loop' somente determina o número de vezes que irá percorrer a matriz. Você pode acessar qualquer variável do template dentro da section. Este exemplo assume que $custid, $nome e $endereco são todas matrizes contendo o mesmo número de valores *} {section name=consumidor loop=$custid} id: {$custid[consumidor]}<br> nome: {$nome[consumidor]}<br> endereço: {$endereco[customer]}<br> <p> {/section}
MOSTRA:
id: 1000<br> nome: John Smith<br> endereço: 253 N 45th<br> <p> id: 1001<br> nome: Jack Jones<br> endereço: 417 Mulberry ln<br> <p> id: 1002<br> nome: Jane Munson<br> endereço: 5605 apple st<br> <p>
Example 7.17. Nomes de section
{* o nome da seção pode ser o que você qusier, e é usado para referenciar os dados contido na seção *} {section name=meusdados loop=$custid} id: {$custid[meusdados]}<br> nome: {$nome[meusdados]}<br> endereço: {$endereco[meusdados]}<br> <p> {/section}
Example 7.18. sections aninhadas
{* sections podem ser aninhadas até o nível que você quiser. Com sections aninhadas, você pode acessar complexas estruturas de dados, tais como matrizes multi-dimensionais. Neste exemplo, $contact_type[customer] é uma matriz contendo os tipos de contatos 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>
Example 7.19. sections e matrizes associativas
{* Este é um exemplo de exibição de uma matriz associativa dentro de uma seção *} {section name=consumidor loop=$contatos} nome: {$contatos[consumidor].nome}<br> telefone: {$contatos[consumidor].telefone}<br> celular: {$contatos[consumidor].celular}<br> e-mail: {$contatos[consumidor].email}<p> {/section}
MOSTRA:
name: John Smith<br> home: 555-555-5555<br> cell: 555-555-5555<br> e-mail: john@mydomain.com<p> name: Jack Jones<br> home phone: 555-555-5555<br> cell phone: 555-555-5555<br> e-mail: jack@mydomain.com<p> name: Jane Munson<br> home phone: 555-555-5555<br> cell phone: 555-555-5555<br> e-mail: jane@mydomain.com<p>
Example 7.20. sectionelse
{* sectionelse irá executar se não houverem mais valores em $custid *} {section name=consumidor loop=$custid} id: {$custid[consumidor]}<br> {sectionelse} não há valores em $custid. {/section}
Sections também tem as suas próprias variáveis que manipulam as propriedades da section. Estas são indicadas assim: {$smarty.section.nomesection.nomevariavel}
A partir do Smarty 1.5.0, a sintaxe para as variáveis de propriedades da section mudou de {%nomesecao.nomevariavel%} para {$smarty.section.nomesection.nomevariavel}. A sintaxe antiga ainda é suportada, mas você verá referências somente à nova sintaxe no manual.
index é usado para mostrar o índice atual do loop, começando em zero (ou pelo atributo start caso tenha sido definido), e incrementado por um (ou pelo atributo step caso tenha sido definido).
Se as propriedades 'start' e 'step' da section não foram modificadas, elas irão funcionar da mesma maneira que a propriedade 'interation' da section funcionam, exceto que ela começa do 0 ao invés de 1.
Example 7.21. propriedade index da section
{section name=consumidor loop=$custid} {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {/section}
MOSTRA:
0 id: 1000<br> 1 id: 1001<br> 2 id: 1002<br>
index_prev é usado para mostrar o índice anterior do loop. No primeiro loop, o valor dele é -1.
Example 7.22. propriedade index_prev da section
{section name=consumidor loop=$custid} {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {* Para sua informação, $custid[consumidor.index] e $custid[consumidor] tem o mesmo significado *} {if $custid[consumidor.index_prev] ne $custid[consumidor.index]} O id do consumidor irá mudar<br> {/if} {/section}
MOSTRA:
0 id: 1000<br> O id do consumidor irá mudar<br> 1 id: 1001<br> O id do consumidor irá mudar<br> 2 id: 1002<br> O id do consumidor irá mudar<br>
index_next é usado para mostrar o próximo indice do loop. No último loop, isto ainda é um mais o índice atual( respeitando a definição do atributo step, caso tenha sido definido.)
Example 7.23. propriedade index_next section
{section name=consumidor loop=$custid} {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {* Para sua informação, $custid[consumidor.index] e $custid[consumidor] tem o mesmo significado *} {if $custid[consumidor.index_next] ne $custid[consumidor.index]} O id do consumidor irá mudar<br> {/if} {/section}
MOSTRA:
0 id: 1000<br> O id do consumidor irá mudar<br> 1 id: 1001<br> O id do consumidor irá mudar<br> 2 id: 1002<br> O id do consumidor irá mudar<br>
iteration é usado para mostrar a interação atual do loop.
'interation' não é afetado pelas propriedades start, step e max da section, diferentemente da propriedade index. Interation diferente de 'index' começa com 1 ao invés de 0. 'rownum' é um sinônimo de 'interation', eles exercem a mesma função.
Example 7.24. propriedade interation da section
{section name=consumidor loop=$custid start=5 step=2} interação atual do loop: {$smarty.section.consumidor.iteration}<br> {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {* Para sua informação, $custid[consumidor.index] e $custid[consumidor] tem o mesmo significado *} {if $custid[consumidor.index_next] ne $custid[consumidor.index]} O id do consumidor irá mudar<br> {/if} {/section}
MOSTRA:
interação atual do loop: 1 5 id: 1000<br> O id do consumidor irá mudar<br> interação atual do loop: 2 7 id: 1001<br> O id do consumidor irá mudar<br> interação atual do loop: 3 9 id: 1002<br> O id do consumidor irá mudar<br>
first é definido como true se a interação atual da section é a primeira.
Example 7.25. propriedade first da section
{section name=consumidor loop=$custid} {if $smarty.section.consumidor.first} <table> {/if} <tr><td>{$smarty.section.consumidor.index} id: {$custid[consumidor]}</td></tr> {if $smarty.section.consumidor.last} </table> {/if} {/section}
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 é definido como true se a interação atual da section é a última.
Example 7.26. propriedade last da section
{section name=consumidor loop=$custid} {if $smarty.section.consumidor.first} <table> {/if} <tr><td>{$smarty.section.consumidor.index} id: {$custid[consumidor]}</td></tr> {if $smarty.section.consumidor.last} </table> {/if} {/section}
MOSTRA:
<table> <tr><td>0 id: 1000</td></tr> <tr><td>1 id: 1001</td></tr> <tr><td>2 id: 1002</td></tr> </table>
rownum é usado para mostrar a interação atual do loop, começando em um. É um sinônimo de iteration, eles exercem a mesma função.
Example 7.27. propriedade rownum da section
{section name=consumidor loop=$custid} {$smarty.section.consumidor.rownum} id: {$custid[consumidor]}<br> {/section}
MOSTRA:
1 id: 1000<br> 2 id: 1001<br> 3 id: 1002<br>
loop é usado para exibir o número do último índice que a section percorreu. Ele pode ser usado dentro ou após o término da section.
Example 7.28. propridade index da section
{section name=consumidor loop=$custid} {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {/section} Foram mostrados {$smarty.section.customer.loop} consumidores acima.
MOSTRA:
0 id: 1000<br> 1 id: 1001<br> 2 id: 1002<br> Foram mostrados 3 consumidores acima.
show é usado como um parâmetro da section. show é um valor booleano, verdadeiro ou falso. Caso seja falso, a section não será mostrada. Se existir uma sectionelse presente, ela será exibida.
Example 7.29. atributo show da section
{* $mostrar_info_consumidor talvez tenha que ser enviada pela aplicação PHP, para decidir quando mostrar ou não mostrar esta section *} {section name=consumidor loop=$custid show=$mostrar_info_consumidor} {$smarty.section.consumidor.rownum} id: {$custid[consumidor]}<br> {/section} {if $smarty.section.consumidor.show} a section foi mostrada. {else} a section não foi mostrada. {/if}
MOSTRA:
1 id: 1000<br> 2 id: 1001<br> 3 id: 1002<br> a section foi mostrada.
total é usado para exibir o número de interações que esta section irá percorrer. Ela pode ser usada dentro ou após a section.
Example 7.30. propriedade total da section
{section name=consumidor loop=$custid step=2} {$smarty.section.consumidor.index} id: {$custid[consumidor]}<br> {/section} Foram mostrados {$smarty.section.customer.loop} consumidores acima.
MOSTRA:
0 id: 1000<br> 2 id: 1001<br> 4 id: 1002<br> Foram mostrados 3 consumidores acima.