section,sectionelse Имя атрибута Тип Обязателен По умолчанию Описание name string Да n/a Название секции loop [$variable_name] Да n/a Имя переменной цикла, для определения количества итераций цикла. start integer Нет 0 Индекс позиции, с которой будет начинаться цикл. Если значение отрицательное, то начальная позиция вычисляется от конца массива. Например, если в переменной цикла 7 элементов и значение атрибута start равно -2, то начальный индекс будет 5. Неверные значения (значения, вне массива) автоматически обрезаются до ближайшего верного значения. step integer Нет 1 Значение шага, которое используется для прохода по массиву. Например, step=2 указывает обход массива по элементам 0,2,4... Если шаг отрицателен, то обход массива будет производится в обратном направлении. max integer Нет 1 Максимальное количество итераций цикла. show boolean Нет true Указывает, показывать или нет эту секцию Секции используются для обхода массива данных. Все тэги section должны иметь в пару тэг /section. Обязательные параметры: name и loop. Имя секции может быть какой угодно последовательностью букв, цифр и знаков подчеркиваний. Секции могут быть вложенными. Имена вложенных секций должны отличаться друг от друга. Переменная цикла (обычно массив) определяет количество итериций цикла. Когда отображаем переменную цикла, имя секции должно быть указана после имени переменной в квадратных скобках []. Тэг sectionelse выполняется, когда переменная цикла пуста. section {/section} OUTPUT: id: 1000
id: 1001
id: 1002
]]>
section loop variable name: {$name[customer]}
address: {$address[customer]}

{/section} OUTPUT: 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

]]> имена секций name: {$name[mydata]}
address: {$address[mydata]}

{/section} ]]> вложенные секции name: {$name[customer]}
address: {$address[customer]}
{section name=contact loop=$contact_type[customer]} {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
{/section}

{/section} OUTPUT: id: 1000
name: John Smith
address: 253 N 45th
home phone: 555-555-5555
cell phone: 555-555-5555
e-mail: john@example.com

id: 1001
name: Jack Jones
address: 417 Mulberry ln
home phone: 555-555-5555
cell phone: 555-555-5555
e-mail: jack@example.com

id: 1002
name: Jane Munson
address: 5605 apple st
home phone: 555-555-5555
cell phone: 555-555-5555
e-mail: jane@example.com

]]> секции и ассоциативные массивы home: {$contacts[customer].home}
cell: {$contacts[customer].cell}
e-mail: {$contacts[customer].email}

{/section} OUTPUT: name: John Smith
home: 555-555-5555
cell: 555-555-5555
e-mail: john@example.com

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

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

]]> sectionelse {sectionelse} there are no values in $custid. {/section} ]]> Секции также имеют свои собственные атрибуты, которые определяют определенные настройки секции. Они указываются примерно так: {$smarty.section.sectionname.varname} ЗАМЕЧАНИЕ: Начиная со Smarty версии 1.5.0, синтаксис атрибутов секций изменился с {%sectionname.varname%} на {$smarty.section.sectionname.varname}. Старый синтаксис пока поддерживается, но вы встретите только новый стиль в примерах данного руководства. index index хранит текущий индекс цикла, начиная с 0 (или значения атрибута start), и увеличивается на единицу (или на значение атрибута step). Техническое Замечание Если атрибуты step и start не указаны, то index аналогичен атрибуту секции iteration, кроме того, что начинается с 0, а не с 1. атрибут секции index {/section} OUTPUT: 0 id: 1000
1 id: 1001
2 id: 1002
]]>
index_prev index_prev хранит предыдущий индекс цикла. На первой итерации устанавливается в -1. атрибут секции index_prev {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} {if $custid[customer.index_prev] ne $custid[customer.index]} The customer id changed
{/if} {/section} OUTPUT: 0 id: 1000
The customer id changed
1 id: 1001
The customer id changed
2 id: 1002
The customer id changed
]]>
index_next index_next хранит следующий индекс цикла. На последней итерации цикла будет иметь значение на единицу больше текущего индекса (или на другое значение, если указан атрибут step). атрибут секции index_next {* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} {if $custid[customer.index_next] ne $custid[customer.index]} The customer id will change
{/if} {/section} OUTPUT: 0 id: 1000
The customer id will change
1 id: 1001
The customer id will change
2 id: 1002
The customer id will change
]]>
iteration iteration хранит текущую итерацию цикла. ЗАМЕЧАНИЕ: Значение не зависит от атрибутов start, step и max, в отличии атрибута index. Итерации также начинаются с 1, а не с 0, как index. rownum является синонимом для iteration. атрибут секции iteration {$smarty.section.customer.index} id: {$custid[customer]}
{* FYI, $custid[customer.index] and $custid[customer] are identical in meaning *} {if $custid[customer.index_next] ne $custid[customer.index]} The customer id will change
{/if} {/section} OUTPUT: current loop iteration: 1 5 id: 1000
The customer id will change
current loop iteration: 2 7 id: 1001
The customer id will change
current loop iteration: 3 9 id: 1002
The customer id will change
]]>
first first имеет значение истина, если текущая итерация цикла - первая. атрибут секции first {/if} {$smarty.section.customer.index} id: {$custid[customer]} {if $smarty.section.customer.last} {/if} {/section} OUTPUT:
0 id: 1000
1 id: 1001
2 id: 1002
]]>
last last имеет значение истина, если текущая итерация цикла - последняя. one. атрибут секции last {/if} {$smarty.section.customer.index} id: {$custid[customer]} {if $smarty.section.customer.last} {/if} {/section} OUTPUT:
0 id: 1000
1 id: 1001
2 id: 1002
]]>
rownum rownum хранит текущую итерацию цикла, начиная с 1. rownum - синоним для iteration. атрибут секции rownum {/section} OUTPUT: 1 id: 1000
2 id: 1001
3 id: 1002
]]>
loop loop хранит последний отработанный индекс цикла. Может быть использован как внутри секции, так и после нее. аттрбут секции index {/section} There were {$smarty.section.customer.loop} customers shown above. OUTPUT: 0 id: 1000
1 id: 1001
2 id: 1002
There were 3 customers shown above. ]]>
show Атрибут show может принимать логические значения (истина или ложь). Если ложь, то цикл section не будет отображаться. Если присутствует тэг sectionelse, то он будет отображен. атрибут секции show {/section} {if $smarty.section.customer.show} the section was shown. {else} the section was not shown. {/if} OUTPUT: 1 id: 1000
2 id: 1001
3 id: 1002
the section was shown. ]]>
total total хранит количество всех итераций цикла. Может быть использвован как в секции, так и после нее. атрибут секции total {/section} There were {$smarty.section.customer.total} customers shown above. OUTPUT: 0 id: 1000
2 id: 1001
4 id: 1002
There were 3 customers shown above. ]]>