section,sectionelse Nombre del Atributo Tipo Requerido Default Descripción name string Si n/a El nombre de la section loop mixed Si n/a El nombre de la variable para determinar el número de iteracciones start integer No 0 La posición del índice de la section donde va a comenzar. Si el valor es negativo, la posición del inicio se calculara a partir del final de la matriz. Por ejemplo, si hubieran 7 valores en la matriz y comienza por -2, el índice inicial es 5. Valores inválidos (valores fuera del tamaño de la matriz) son automáticamente truncados para el valor valido mas próximo. step integer No 1 El valor del step que sera usado para el loop de la matriz. Por ejemplo, step=2 realizara el loop con los índices 0,2,4, etc. Si step es negativo, este avanzara en la matriz de atras para adelante. max integer No n/a Defíne el número máximo de ciclos(loops) para la section. show boolean No true Determina cuando mostrar o no esta sección Las section del template son usada para realizar un ciclo(loop) de un arreglo de datos. (al agiual que un {foreach}). Todas las etiquetas section deben tener su par /section. Los parámetros requeridos son name y loop. El nombre de la section puede ser el que usted quiera, formado por letras, números y subrayados. Las sections pueden ser anidadas, y los nombres de la section anidadas deben ser diferentes unos de otros. Las variables del loop (normalmente una matriz de valores) determina el número de veces del loop de la section. Cuando estuviera mostrando una variable dentro de una section, el nombre de la section debe estar al lado de la variable dentro de corchetes []. sectionelse es ejecutado cuando no hubiera valores para la variable del loop(ciclo). section assign('custid',$data); ?> ]]> {/section}
{* print out all the values of the $custid array reversed *} {section name=foo loop=$custid step=-1} {$custid[foo]}
{/section} ]]>
The above example will output: id: 1001
id: 1002

id: 1002
id: 1001
id: 1000
]]>
Otro par de ejemplos sin un arreglo asignado. {section name=bar loop=21 max=6 step=-2} {$smarty.section.bar.index} {/section} ]]> Esta es la salida del ejemplo de arriba: 20 18 16 14 12 10 ]]>
loop(ciclo) de la variable section assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); ?> ]]> La salida del ajemplo de arriba: id: 1000
name: John Smith
address: 253 N 45th

id: 1001
name: Jack Jones
address: 417 Mulberry ln

id: 1002
name: Jane Munson
address: 5605 apple st

]]>
Nombres de section id: {$custid[anything]}
name: {$name[anything]}
address: {$address[anything]}

{/section} ]]>
sections anidadas assign('custid',$id); $fullnames = array('John Smith','Jack Jones','Jane Munson'); $smarty->assign('name',$fullnames); $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); $smarty->assign('address',$addr); $types = array( array( 'home phone', 'cell phone', 'e-mail'), array( 'home phone', 'web'), array( 'cell phone') ); $smarty->assign('contact_type', $types); $info = array( array('555-555-5555', '666-555-5555', 'john@myexample.com'), array( '123-456-4', 'www.example.com'), array( '0457878') ); $smarty->assign('contact_info', $info); ?> ]]> id: {$custid[customer]}
name: {$name[customer]}
address: {$address[customer]}
{section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
{/section} {/section} ]]>
la salida del ejemplo de arriba: id: 1000
name: John Smith
address: 253 N 45th
home phone: 555-555-5555
cell phone: 666-555-5555
e-mail: john@myexample.com

id: 1001
name: Jack Jones
address: 417 Mulberry ln
home phone: 123-456-4
web: www.example.com

id: 1002
name: Jane Munson
address: 5605 apple st
cell phone: 0457878
]]>
sections y matrices asociativas 'John Smith', 'home' => '555-555-5555', 'cell' => '666-555-5555', 'email' => 'john@myexample.com'), array('name' => 'Jack Jones', 'home' => '777-555-5555', 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'), array('name' => 'Jane Munson', 'home' => '000-555-5555', 'cell' => '123456', 'email' => 'jane@myexample.com') ); $smarty->assign('contacts',$data); ?> ]]> name: {$contacts[customer].name}
home: {$contacts[customer].home}
cell: {$contacts[customer].cell}
e-mail: {$contacts[customer].email}

{/section} ]]>
Esta es la salida del ejemplo de arriba: name: John Smith
home: 555-555-5555
cell: 666-555-5555
e-mail: john@myexample.com

name: Jack Jones
home phone: 777-555-5555
cell phone: 888-555-5555
e-mail: jack@myexample.com

name: Jane Munson
home phone: 000-555-5555
cell phone: 123456
e-mail: jane@myexample.com

]]>
Ejemplo usando una base de datos(eg usando Pear o Adodb) assign('contacts',$db->getAll($sql) ); ?> ]]>  Name>HomeCellEmail {section name=co loop=$contacts} view {$contacts[co].name} {$contacts[co].home} {$contacts[co].cell} {$contacts[co].email} {/section} ]]>
{sectionelse} {sectionelse} there are no values in $custid. {/section} ]]> Las sections también tiene sus propias variables que manipulan las propiedades de section. Estas son indicadas asi: {$smarty.section.sectionname.varname} NOTA: a partir de Smarty 1.5.0, la sintaxis de las variables de las propiedades de section ha sido cambiadas de {%sectionname.varname%} a {$smarty.section.sectionname.varname}. La sintaxis antigua es aun soportada, pero usted puede ver la referencia de la sintaxis nueva en los ejemplos del manual. index index es usado para mostrar el índice actual del cliclo(loop), comenzando en cero (o comienza con el atributo dado), e incrementando por uno (o por un atributo de paso dado). Nota Tecnica Si las propiedades de paso y comienzo del section son modificadas, entonces estas funcionan igual a las propiedades de iteration de la section, exepto que comienzan en 0 en vez de 1. {section} propiedades del index {/section} ]]> salida del ejemplo de arriba: 1 id: 1001
2 id: 1002
]]>
index_prev El index_prev es usado para mostrar el índice anterior del loop(ciclo). del primer loop(ciclo) esto es definido como -1. index_next El index_next es usado para mostrar el próximo indice del loop. del último loop, esto es uno mas que el índice actual( respetando la definición del atributo step que se a dado.) {section} propiedades del index_next y index_prev assign('custid',$data); ?> ]]> indexid index_prevprev_id index_nextnext_id {section name=cus loop=$custid} {$smarty.section.cus.index}{$custid[cus]} {$smarty.section.cus.index_prev}{$custid[cus.index_prev]} {$smarty.section.cus.index_next}{$custid[cus.index_next]} {/section} ]]> la salida del ejemplo de arriba esta contenido en la siguiente tabla: iteration iteration es usado para mostrar la iteración actual del loop(ciclo). Esto no es afectado por las propiedades del section start, step y max, distinto de las propriedades del index. Iteration también comineza con 1 en vez de 0 como index. rownum es un alias de iteration, estas funcionan de manera identica. {section} propiedades de iteration assign('custid',$id); ?> ]]> {/section} ]]> salida del ejemplo de arriba: iteration=2 index=7 id=3007
iteration=3 index=9 id=3009
iteration=4 index=11 id=3011
iteration=5 index=13 id=3013
iteration=6 index=15 id=3015
]]>
Este ejemplo utiliza la propiedad iteration para salida a una tabla bloqueando el encabezado para cada 5 renglones (utilice {if} con el operador mod). {section name=co loop=$contacts} {if $smarty.section.co.iteration % 5 == 1}  Name>HomeCellEmail {/if}
view {$contacts[co].name} {$contacts[co].home} {$contacts[co].cell} {$contacts[co].email} {/section} ]]> first first es definido como true se la iteración actual de la section es la primera. last last es definido como true si la iteración actual del section es la ultima. {section} propiedades first y last En este ciclo de ejemplo el arreglo $customer, en la salida es bloqueado el encabezado en la primera iteracion y en la ultima la salida es bloqueda para el pie de pagina. (Utilice la propiedad section total) idcustomer {/if} {$customers[customer].id}} {$customers[customer].name} {if $smarty.section.customer.last} {$smarty.section.customer.total} customers {/if} {/section} ]]> rownum rownum es usado para mostrar la interación actual del loop(ciclo), comenzando con 1. Es un alias para iteration, estas funcionan de modo identico. loop loop es usado para mostrar el ultimo número del índice del loop(ciclo) de esta section. Esto puede ser usado dentro o fuera del section. {section} propiedades de index {/section} There were {$smarty.section.customer.loop} customers shown above. ]]> La salida del ejemplo de arriba: 1 id: 1001
2 id: 1002
There were 3 customers shown above. ]]>
show showEs usado como parámetro para section. show Es un valor booleano, true o false. Si es false, la section no será mostrada. Si existiera un sectionelse presente, este será alternativamente mostrado. section atributos de show {/section} {if $smarty.section.customer.show} the section was shown. {else} the section was not shown. {/if} ]]> La salida del ejemplo de arriba: 2 id: 1001
3 id: 1002
the section was shown. ]]>
total total es usado para mostrar el número de iteraciones que está section tendra. Este puede ser usado dentro o fuera del section. {section} propiedades de total {/section} There were {$smarty.section.customer.total} customers shown above. ]]> The above example will output: 2 id: 1002
4 id: 1004
There were 3 customers shown above. ]]>
Ver también {foreach} y $smarty.section.