section,sectionelse
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'.
Exemplo 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>
|
|
Exemplo 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>
|
|
Exemplo 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}
|
|
Exemplo 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>
|
|
Exemplo 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>
|
|
Exemplo 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}
Nota: 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
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).
Nota Técnica:: 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.
Exemplo 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
index_prev é usado para mostrar o índice anterior do loop. No primeiro loop, o valor dele é -1.
Exemplo 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
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.)
Exemplo 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
iteration é usado para mostrar a interação atual do loop.
Nota:: '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.
Exemplo 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
first é definido como true se a interação atual da section é a primeira.
Exemplo 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
last é definido como true se a interação atual da section é a última.
Exemplo 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
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.
Exemplo 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
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.
Exemplo 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
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.
Exemplo 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
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.
Exemplo 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.
|
|