2014-08-05 17:49:42 +04:00
|
|
|
|
Тег {foreach}
|
|
|
|
|
=============
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
Тег `foreach` предоставляет простой способ перебора массивов.
|
|
|
|
|
`Foreach` работает только с массивами, объектами и интервалами.
|
2014-08-06 22:42:42 +04:00
|
|
|
|
|
2014-08-01 12:12:19 +04:00
|
|
|
|
```smarty
|
2016-04-12 12:28:57 +03:00
|
|
|
|
{foreach $list [as [$key =>] $value] [index=$index] [first=$first] [last=$last]}
|
2014-08-01 12:12:19 +04:00
|
|
|
|
{* ...code... *}
|
|
|
|
|
{break}
|
|
|
|
|
{* ...code... *}
|
|
|
|
|
{continue}
|
|
|
|
|
{* ...code... *}
|
|
|
|
|
{foreachelse}
|
|
|
|
|
{* ...code... *}
|
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### {foreach}
|
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
Перебор значений массива $list:
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
```smarty
|
|
|
|
|
{foreach $list as $value}
|
|
|
|
|
<div>{$value}</div>
|
|
|
|
|
{/foreach}
|
2015-02-12 12:13:35 +03:00
|
|
|
|
|
|
|
|
|
{foreach 1..7 as $value} {* так же хорошо работает и с интрвелами *}
|
|
|
|
|
<div>№{$value}</div>
|
|
|
|
|
{/foreach}
|
2014-08-01 12:12:19 +04:00
|
|
|
|
```
|
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
Перебор ключей и значений массива $list:
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
```smarty
|
|
|
|
|
{foreach $list as $key => $value}
|
|
|
|
|
<div>{$key}: {$value}</div>
|
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
2016-05-08 00:33:23 +03:00
|
|
|
|
|
2016-05-06 23:04:08 +03:00
|
|
|
|
Получение номера (индекса) итерации, начиная с 0
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
```smarty
|
2016-05-06 23:04:08 +03:00
|
|
|
|
{foreach $list as $value}
|
2016-05-08 00:33:23 +03:00
|
|
|
|
<div>№{$value@index}: {$value}</div>
|
2016-05-06 23:04:08 +03:00
|
|
|
|
{/foreach}
|
|
|
|
|
|
|
|
|
|
или
|
|
|
|
|
|
2014-08-01 12:12:19 +04:00
|
|
|
|
{foreach $list as $value index=$index}
|
|
|
|
|
<div>№{$index}: {$value}</div>
|
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
2016-05-08 00:33:23 +03:00
|
|
|
|
Определение первой итерации:
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
```smarty
|
2016-05-06 23:04:08 +03:00
|
|
|
|
{foreach $list as $value}
|
2016-05-08 00:33:23 +03:00
|
|
|
|
<div>{if $value@first} first item {/if} {$value}</div>
|
|
|
|
|
{/foreach}
|
|
|
|
|
|
|
|
|
|
или
|
|
|
|
|
|
|
|
|
|
{foreach $list as $value first=$first}
|
|
|
|
|
<div>{if $first} first item {/if} {$value}</div>
|
2014-08-01 12:12:19 +04:00
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
2016-05-08 00:33:23 +03:00
|
|
|
|
Переменная `$value@first` будет иметь значение **TRUE**, если текущая итерация является первой.
|
|
|
|
|
Определение последней интерации:
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
```smarty
|
2016-05-06 23:04:08 +03:00
|
|
|
|
{foreach $list as $value}
|
2016-05-08 00:33:23 +03:00
|
|
|
|
<div>{if $value@last} last item {/if} {$value}</div>
|
|
|
|
|
{/foreach}
|
|
|
|
|
|
|
|
|
|
или
|
|
|
|
|
|
|
|
|
|
{foreach $list as $value last=$last}
|
|
|
|
|
<div>{if $last} last item {/if} {$value}</div>
|
2014-08-01 12:12:19 +04:00
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
2016-05-06 23:04:08 +03:00
|
|
|
|
Переменная `$value:last` будет иметь значение **TRUE**, если текущая итерация является последней.
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
**Замечание:**
|
|
|
|
|
Использование `last` требует от `$list` быть **countable**.
|
|
|
|
|
|
2014-08-01 12:12:19 +04:00
|
|
|
|
### {break}
|
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
Тег `{break}` используется для выхода из цикла до достижения последней итерации.
|
|
|
|
|
Если в цикле встречается тег `{break}`, цикл завершает свою работу, и далее, выполняется код, следующий сразу за блоком цикла
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
### {continue}
|
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
Тег `{continue}` используется для прерывания текущей итерации.
|
|
|
|
|
Если в цикле встречается тег `{continue}`, часть цикла, следующая после тега, не выполняется, и начинается следующая итерация.
|
|
|
|
|
Если текущая итерация была последней, цикл завершается.
|
2014-08-01 12:12:19 +04:00
|
|
|
|
|
|
|
|
|
### {foreachelse}
|
|
|
|
|
|
|
|
|
|
Тег {foreachelse} ограничивает код, который должен быть выполнен, если итерируемый объект пуст.
|
|
|
|
|
|
|
|
|
|
```smarty
|
|
|
|
|
{var $list = []}
|
|
|
|
|
{foreach $list as $value}
|
|
|
|
|
<div>{if $last} last item {/if} {$value}</div>
|
|
|
|
|
{foreachelse}
|
|
|
|
|
<div>empty</div>
|
|
|
|
|
{/foreach}
|
|
|
|
|
```
|
|
|
|
|
|
2015-02-12 12:13:35 +03:00
|
|
|
|
В блоке `{foreachelse}...{/foreach}` использование `{break}`, `{continue}` выбросит исключение `Fenom\CompileException` при компиляции
|