View file manual-ru/language.function.section.html

File size: 29.34Kb
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{section},{sectionelse}</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Руководство по Smarty">
<link rel="up" href="language.builtin.functions.html" title="Chapter 7. Встроенные функции">
<link rel="prev" href="language.function.php.html" title="{php}">
<link rel="next" href="language.function.strip.html" title="{strip}">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">{section},{sectionelse}</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="language.function.php.html">Prev</a> </td>
<th width="60%" align="center">Chapter 7. Встроенные функции</th>
<td width="20%" align="right"> <a accesskey="n" href="language.function.strip.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="{section},{sectionelse}">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="language.function.section"></a>{section},{sectionelse}</h2></div></div></div>
<p>
  Секции используются для обхода
  <span class="bold"><strong>массивов данных</strong></span>
  (так же, как и <a class="link" href="language.function.foreach.html" title="{foreach},{foreachelse}">{foreach}</a>).
  Каждый тэг <span class="emphasis"><em>{section}</em></span> должен иметь пару
  <span class="emphasis"><em>{/section}</em></span>. Обязательными параметрами являются
  <span class="emphasis"><em>name</em></span> и <span class="emphasis"><em>loop</em></span>. Имя цикла
  {section} может быть любым, состоящим из букв, цифр и знаков
  подчеркивания. Циклы <span class="emphasis"><em>{section}</em></span> могут быть вложенными
  и имена вложенных {section} должны быть уникакльными между собой.
  Переменная <span class="emphasis"><em>loop</em></span> (обычно - массив значений)
  определяет количество итераций цикла.
  При печати переменных внутри секции, имя секции должно быть указано
  рядом с именем переменной внутри квадратных скобок [].
  <span class="emphasis"><em>{sectionelse}</em></span> выполняется в том случае, если
  параметр <span class="emphasis"><em>loop</em></span> не содержит значений.
 </p>
<div class="informaltable"><table border="1">
<colgroup>
<col align="center">
<col align="center">
<col align="center">
<col align="center">
<col>
</colgroup>
<thead><tr>
<th align="center">Имя атрибута</th>
<th align="center">Тип</th>
<th align="center">Обязателен</th>
<th align="center">По умолчанию</th>
<th>Описание</th>
</tr></thead>
<tbody>
<tr>
<td align="center">name</td>
<td align="center">string</td>
<td align="center">Да</td>
<td align="center"><span class="emphasis"><em>n/a</em></span></td>
<td>Название секции</td>
</tr>
<tr>
<td align="center">loop</td>
<td align="center">mixed</td>
<td align="center">Да</td>
<td align="center"><span class="emphasis"><em>n/a</em></span></td>
<td>Значение, определяющее количество итераций цикла.</td>
</tr>
<tr>
<td align="center">start</td>
<td align="center">integer</td>
<td align="center">Нет</td>
<td align="center"><span class="emphasis"><em>0</em></span></td>
<td>
     Индекс позиции, с которой будет начинаться
     цикл. Если значение отрицательное, то начальная позиция
     вычисляется от конца массива. Например, если в переменной
     цикла 7 элементов и значение атрибута start равно -2, то
     начальный индекс будет 5. Неверные значения (значения, вне
     массива) автоматически обрезаются до ближайшего верного
     значения.
    </td>
</tr>
<tr>
<td align="center">step</td>
<td align="center">integer</td>
<td align="center">Нет</td>
<td align="center"><span class="emphasis"><em>1</em></span></td>
<td>
     Значение шага, которое используется для прохода по
     массиву. Например, step=2 указывает обход массива
     по элементам 0,2,4... Если шаг отрицателен, то обход
     массива будет производится в обратном направлении.
    </td>
</tr>
<tr>
<td align="center">max</td>
<td align="center">integer</td>
<td align="center">Нет</td>
<td align="center"><span class="emphasis"><em>1</em></span></td>
<td>Максимальное количество итераций цикла.</td>
</tr>
<tr>
<td align="center">show</td>
<td align="center">boolean</td>
<td align="center">Нет</td>
<td align="center"><span class="emphasis"><em>true</em></span></td>
<td>Указывает, показывать или нет эту секцию</td>
</tr>
</tbody>
</table></div>
<div class="example">
<a name="id2675467"></a><p class="title"><b>Example 7.30. {section}</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

$data = array(1000,1001,1002);
$smarty-&gt;assign('custid',$data);

?&gt;

  </pre>
<pre class="programlisting">

{* этот пример напечатает все значения массива $custid *}
{section name=customer loop=$custid}
    id: {$custid[customer]}&lt;br /&gt;
{/section}
&lt;hr /&gt;
{* этот пример напечатает все значения массива $custid в обратном порядке *}
{section name=foo loop=$custid step=-1}
    {$custid[foo]}&lt;br /&gt;
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

id: 1000&lt;br /&gt;
id: 1001&lt;br /&gt;
id: 1002&lt;br /&gt;
&lt;hr /&gt;
id: 1002&lt;br /&gt;
id: 1001&lt;br /&gt;
id: 1000&lt;br /&gt;

  </pre>
<p>
   Ещё немного примеров без присвоенного массива.
  </p>
<pre class="programlisting">

{section name=foo start=10 loop=20 step=2}
    {$smarty.section.foo.index}
{/section}
&lt;hr /&gt;
{section name=bar loop=21 max=6 step=-2}
    {$smarty.section.bar.index}
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

10 12 14 16 18
&lt;hr /&gt;
20 18 16 14 12 10

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2675550"></a><p class="title"><b>Example 7.31. Переменная loop команды {section}</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

$id = array(1001,1002,1003);
$smarty-&gt;assign('custid',$id);

$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty-&gt;assign('name',$fullnames);

$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty-&gt;assign('address',$addr);

?&gt;

  </pre>
<pre class="programlisting">

{*
  переменная loop определяет только количество итераций.
  вы можете получать доступ к любой переменной из шаблона внутри секции.
  Этот пример предполагает, что $custid, $name и $address все являются
  массивами, содержащими одинаковое количество значений
*}
{section name=customer loop=$custid}
&lt;p&gt;
    id: {$custid[customer]}&lt;br /&gt;
    name: {$name[customer]}&lt;br /&gt;
    address: {$address[customer]}
&lt;/p&gt;
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

&lt;p&gt;
    id: 1000&lt;br /&gt;
    name: John Smith&lt;br /&gt;
    address: 253 N 45th
&lt;/p&gt;
&lt;p&gt;
    id: 1001&lt;br /&gt;
    name: Jack Jones&lt;br /&gt;
    address: 417 Mulberry ln
&lt;/p&gt;
&lt;p&gt;
    id: 1002&lt;br /&gt;
    name: Jane Munson&lt;br /&gt;
    address: 5605 apple st
&lt;/p&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2675613"></a><p class="title"><b>Example 7.32. именование {section}</b></p>
<div class="example-contents"><pre class="programlisting">

{*
  имя секции может быть любым, так как оно используется для обращения к
  данным в пределах секции
*}
{section name=anything loop=$custid}
&lt;p&gt;
    id: {$custid[anything]}&lt;br /&gt;
    name: {$name[anything]}&lt;br /&gt;
    address: {$address[anything]}
&lt;/p&gt;
{/section}

  </pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2675633"></a><p class="title"><b>Example 7.33. вложенные секции</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

$id = array(1001,1002,1003);
$smarty-&gt;assign('custid',$id);

$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty-&gt;assign('name',$fullnames);

$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty-&gt;assign('address',$addr);

$types = array(
           array( 'home phone', 'cell phone', 'e-mail'),
           array( 'home phone', 'web'),
           array( 'cell phone')
         );
$smarty-&gt;assign('contact_type', $types);

$info = array(
           array('555-555-5555', '666-555-5555', '[email protected]'),
           array( '123-456-4', 'www.example.com'),
           array( '0457878')
        );
$smarty-&gt;assign('contact_info', $info);
?&gt;

  </pre>
<pre class="programlisting">

{*
  секции могут иметь вложенность любой глубины. Используя вложенные секции,
  вы можете обращаться к сложным структурам данных, таким как многомерные
  массивы. В этом примере $contact_type[customer] - это массив 
  типов контактов для текущего клиента.
*}
{section name=customer loop=$custid}
&lt;hr&gt;
    id: {$custid[customer]}&lt;br /&gt;
    name: {$name[customer]}&lt;br /&gt;
    address: {$address[customer]}&lt;br /&gt;
   	{section name=contact loop=$contact_type[customer]}
        {$contact_type[customer][contact]}: {$contact_info[customer][contact]}&lt;br /&gt;
 	  {/section}
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

&lt;hr&gt;
    id: 1000&lt;br /&gt;
    name: John Smith&lt;br /&gt;
    address: 253 N 45th&lt;br /&gt;
        home phone: 555-555-5555&lt;br /&gt;
        cell phone: 666-555-5555&lt;br /&gt;
        e-mail: [email protected]&lt;br /&gt;
&lt;hr&gt;
    id: 1001&lt;br /&gt;
    name: Jack Jones&lt;br /&gt;
    address: 417 Mulberry ln&lt;br /&gt;
        home phone: 123-456-4&lt;br /&gt;
        web: www.example.com&lt;br /&gt;
&lt;hr&gt;
    id: 1002&lt;br /&gt;
    name: Jane Munson&lt;br /&gt;
    address: 5605 apple st&lt;br /&gt;
        cell phone: 0457878&lt;br /&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2675700"></a><p class="title"><b>Example 7.34. секции и ассоциативные массивы</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

$data = array(
          array('name' =&gt; 'John Smith', 'home' =&gt; '555-555-5555',
                'cell' =&gt; '666-555-5555', 'email' =&gt; '[email protected]'),
          array('name' =&gt; 'Jack Jones', 'home' =&gt; '777-555-5555',
                'cell' =&gt; '888-555-5555', 'email' =&gt; '[email protected]'),
          array('name' =&gt; 'Jane Munson', 'home' =&gt; '000-555-5555',
                'cell' =&gt; '123456', 'email' =&gt; '[email protected]')
        );
$smarty-&gt;assign('contacts',$data);

?&gt;

  </pre>
<pre class="programlisting">

{*
   Это пример вывода ассоциативного массива
   данных внутри секции
*}
{section name=customer loop=$contacts}
&lt;p&gt;
    name: {$contacts[customer].name}&lt;br /&gt;
    home: {$contacts[customer].home}&lt;br /&gt;
    cell: {$contacts[customer].cell}&lt;br /&gt;
    e-mail: {$contacts[customer].email}
&lt;/p&gt;
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

&lt;p&gt;
    name: John Smith&lt;br /&gt;
    home: 555-555-5555&lt;br /&gt;
    cell: 666-555-5555&lt;br /&gt;
    e-mail: [email protected]
&lt;/p&gt;
&lt;p&gt;
    name: Jack Jones&lt;br /&gt;
    home phone: 777-555-5555&lt;br /&gt;
    cell phone: 888-555-5555&lt;br /&gt;
    e-mail: [email protected]
&lt;/p&gt;
&lt;p&gt;
    name: Jane Munson&lt;br /&gt;
    home phone: 000-555-5555&lt;br /&gt;
    cell phone: 123456&lt;br /&gt;
    e-mail: [email protected]
&lt;/p&gt;

  </pre>
<p>Базы данных (например, PEAR или ADODB)</p>
<pre class="programlisting">

&lt;?php

$sql = 'select id, name, home, cell, email from contacts';
$smarty-&gt;assign('contacts',$db-&gt;getAll($sql) );

?&gt;

  </pre>
<pre class="programlisting">

{*
   выводим результат запроса к БД в таблицу
*}
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Name&gt;&lt;/th&gt;&lt;th&gt;Home&lt;/th&gt;&lt;th&gt;Cell&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;/tr&gt;
{section name=co loop=$contacts}
  &lt;tr&gt;
    &lt;td&gt;&lt;a href="view.php?id={$contacts[co].id}"&gt;view&lt;a&gt;&lt;/td&gt;
    &lt;td&gt;{$contacts[co].name}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].home}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].cell}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].email}&lt;/td&gt;
  &lt;tr&gt;
{/section}
&lt;/table&gt;

  </pre>
</div>
</div>
<br class="example-break"><div class="example">
<a name="id2675838"></a><p class="title"><b>Example 7.35. {sectionelse}</b></p>
<div class="example-contents"><pre class="programlisting">

{* sectionelse будет выполнена в том случае, если $custid не содержит значений *}
{section name=customer loop=$custid}
    id: {$custid[customer]}&lt;br /&gt;
{sectionelse}
    there are no values in $custid.
{/section}

  </pre></div>
</div>
<br class="example-break"><p>
		Секции так же имеют собственные переменные, которые содержат свойства секций.
  Они обозначаются так:
  <a class="link" href="language.variables.smarty.html#language.variables.smarty.loops" title="{$smarty.section}, {$smarty.foreach}">{$smarty.section.sectionname.varname}</a>
	</p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
   Начиная с версии Smarty 1.5.0, синтаксис переменных свойств сессий был
   изменен с {%sectionname.varname%} на {$smarty.section.sectionname.varname}.
   Старый синтаксис всё ещё поддерживается, но вы увидите лишь примеры
   нового синтаксиса.
	 </p>
</div>
<div class="sect2" title="index">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index"></a>index</h3></div></div></div>
<p>
   index используется для отображения текущего индекса массива,
   начиная с нуля (или с атрибута start, если он был указан) и увеличиваясь
   на единицу (или на значение атрибута step, если он был указан).
		</p>
<div class="note" title="Техническое Замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Техническое Замечание</h3>
<p>
		 	Если атрибуты step и start не указаны, то index
				аналогичен атрибуту секции iteration, кроме того,
				что начинается с 0, а не с 1.
			</p>
</div>
<div class="example">
<a name="id2675950"></a><p class="title"><b>Example 7.36. свойства {section} index</b></p>
<div class="example-contents">
<pre class="programlisting">

{* к вашему сведению, $custid[customer.index] и $custid[customer] означают одно и то же *}

{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

0 id: 1000&lt;br /&gt;
1 id: 1001&lt;br /&gt;
2 id: 1002&lt;br /&gt;

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="index_prev">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index.prev"></a>index_prev</h3></div></div></div>
<p>
			index_prev используется для отображения предыдущего индекса цикла
  	На первой итерации он установлен в -1.
  </p>
</div>
<div class="sect2" title="index_next">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.index.next"></a>index_next</h3></div></div></div>
<p>
  	index_next используется для отображения следующего индекса цикла
  	На последней итерации он всё же на единицу больше текущего (или на другое
  	значение, если указан атрибут step).
		</p>
<div class="example">
<a name="id2676030"></a><p class="title"><b>Example 7.37. свойства {section} index_next и index_prev</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

$data = array(1001,1002,1003,1004,1005);
$smarty-&gt;assign('custid',$data);

?&gt;

   </pre>
<pre class="programlisting">

{* к вашему сведению, $custid[cus.index] и $custid[cus] означают одно и то же *}

&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;index&lt;/th&gt;&lt;th&gt;id&lt;/th&gt;
    &lt;th&gt;index_prev&lt;/th&gt;&lt;th&gt;prev_id&lt;/th&gt;
    &lt;th&gt;index_next&lt;/th&gt;&lt;th&gt;next_id&lt;/th&gt;
  &lt;/tr&gt;
{section name=cus loop=$custid}
  &lt;tr&gt;
    &lt;td&gt;{$smarty.section.cus.index}&lt;/td&gt;&lt;td&gt;{$custid[cus]}&lt;/td&gt;
    &lt;td&gt;{$smarty.section.cus.index_prev}&lt;/td&gt;&lt;td&gt;{$custid[cus.index_prev]}&lt;/td&gt;
    &lt;td&gt;{$smarty.section.cus.index_next}&lt;/td&gt;&lt;td&gt;{$custid[cus.index_next]}&lt;/td&gt;
  &lt;/tr&gt;
{/section}
&lt;/table&gt;

   </pre>
<p>
    Результатом выполнения этого примера будет таблица, содержащая следующее:
   </p>
<pre class="screen">

index  id    index_prev prev_id index_next next_id
0      1001  -1	                1          1002
1      1002  0          1001    2          1003
2      1003  1          1002    3          1004
3      1004  2          1003    4          1005
4      1005  3          1004    5

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="iteration">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.iteration"></a>iteration</h3></div></div></div>
<p>
  	iteration используется для отображения текущего номера итерации цикла.
		</p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
 		 Это значение не зависит от свойств start, step и max, в отличие от
 		 свойства <a class="link" href="language.function.section.html#section.property.index" title="index">index</a>.
 		 Кроме того, итерации начинаются с единицы, а не с нуля, как индексы.
 		 <a class="link" href="language.function.section.html#section.property.rownum" title="rownum">rownum</a> - это синоним к
 		 свойству iteration, они работают одинаково.
   </p>
</div>
<div class="example">
<a name="id2676149"></a><p class="title"><b>Example 7.38. свойство {section} iteration</b></p>
<div class="example-contents">
<pre class="programlisting">

&lt;?php

// array of 3000 to 3015
$id = range(3000,3015);
$smarty-&gt;assign('custid',$id);

?&gt;

   </pre>
<pre class="programlisting">

{section name=cu loop=$custid start=5 step=2}
  iteration={$smarty.section.cu.iteration}
  index={$smarty.section.cu.index}
  id={$custid[cu]}&lt;br /&gt;
{/section}

   </pre>
<p>
    Результат выполнения данного примера:
   </p>
<pre class="screen">

iteration=1 index=5 id=3005&lt;br /&gt;
iteration=2 index=7 id=3007&lt;br /&gt;
iteration=3 index=9 id=3009&lt;br /&gt;
iteration=4 index=11 id=3011&lt;br /&gt;
iteration=5 index=13 id=3013&lt;br /&gt;
iteration=6 index=15 id=3015&lt;br /&gt;

   </pre>
<p>
    Этот пример использует свойство iteration для
    вывода заголовка таблицы через каждые пять строчек
    (использует <a class="link" href="language.function.if.html" title="{if},{elseif},{else}">{if}</a>
    с оператором mod - остаток от деления).
   </p>
<pre class="programlisting">

    &lt;table&gt;
{section name=co loop=$contacts}
  {if $smarty.section.co.iteration % 5 == 1}
    &lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Name&gt;&lt;/th&gt;&lt;th&gt;Home&lt;/th&gt;&lt;th&gt;Cell&lt;/th&gt;&lt;th&gt;Email&lt;/th&gt;&lt;/tr&gt;
  {/if}
  &lt;tr&gt;
    &lt;td&gt;&lt;a href="view.php?id={$contacts[co].id}"&gt;view&lt;a&gt;&lt;/td&gt;
    &lt;td&gt;{$contacts[co].name}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].home}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].cell}&lt;/td&gt;
    &lt;td&gt;{$contacts[co].email}&lt;/td&gt;
  &lt;tr&gt;
{/section}
&lt;/table&gt;

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="first">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.first"></a>first</h3></div></div></div>
<p>
   Параметр first установлен в true, если текущая <a class="link" href="language.function.section.html#section.property.iteration" title="iteration">итерация</a> секции
   является первой.
  </p>
</div>
<div class="sect2" title="last">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.last"></a>last</h3></div></div></div>
<p>
   Параметр last установлен в true, если текущая <a class="link" href="language.function.section.html#section.property.iteration" title="iteration">итерация</a> секции
   является последней.
  </p>
<div class="example">
<a name="id2676290"></a><p class="title"><b>Example 7.39. свойства {section} first и last</b></p>
<div class="example-contents">
<p>
    Этот пример проходит циклом по массиву $customers,
    выводит заголовок на первой итерации и футер на последней
    (использует свойство {section} <a class="link" href="language.function.section.html#section.property.total" title="total">total</a>)
   </p>
<pre class="programlisting">

{section name=customer loop=$customers}
  {if $smarty.section.customer.first}
    &lt;table&gt;
    &lt;tr&gt;&lt;th&gt;id&lt;/th&gt;&lt;th&gt;customer&lt;/th&gt;&lt;/tr&gt;
  {/if}

  &lt;tr&gt;
    &lt;td&gt;{$customers[customer].id}}&lt;/td&gt;
    &lt;td&gt;{$customers[customer].name}&lt;/td&gt;
  &lt;/tr&gt;

  {if $smarty.section.customer.last}
    &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;{$smarty.section.customer.total} customers&lt;/td&gt;&lt;/tr&gt;
    &lt;/table&gt;
  {/if}
{/section}

  </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="rownum">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.rownum"></a>rownum</h3></div></div></div>
<p>
   rownum используется для отображения текущего номера итерации цикла,
   начиная с единицы. Это синоним свойства <a class="link" href="language.function.section.html#section.property.iteration" title="iteration">iteration</a>, они работа идентично.
  </p>
</div>
<div class="sect2" title="loop">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.loop"></a>loop</h3></div></div></div>
<p>
   loop используется для отображения последнего номера индекса, по которому
   проходила итерация секции. Это свойство может быть использовано как внутри,
   так и вне секции.
  </p>
<div class="example">
<a name="id2676389"></a><p class="title"><b>Example 7.40. свойство {section} index</b></p>
<div class="example-contents">
<pre class="programlisting">

{section name=customer loop=$custid}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}

There were {$smarty.section.customer.loop} customers shown above.

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

0 id: 1000&lt;br /&gt;
1 id: 1001&lt;br /&gt;
2 id: 1002&lt;br /&gt;

There were 3 customers shown above.

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="show">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.show"></a>show</h3></div></div></div>
<p>
   <span class="emphasis"><em>show</em></span> используется в качестве параметра секции.
   <span class="emphasis"><em>show</em></span> является булевым значением, true или false.
   Если false, секция не будет отображена. Если присутствует секция {sectionelse},
   вместо этого будет отображена она.
  </p>
<div class="example">
<a name="id2676456"></a><p class="title"><b>Example 7.41. атрибут {section} show</b></p>
<div class="example-contents">
<pre class="programlisting">

{*
  $show_customer_info (true/false) может быть передан из приложения PHP,
  чтобы определить, необходимо ли отображать секцию
*}
{section name=customer loop=$custid show=$show_customer_info}
  {$smarty.section.customer.rownum} id: {$custid[customer]}&lt;br /&gt;
{/section}

{if $smarty.section.customer.show}
  the section was shown.
{else}
  the section was not shown.
{/if}

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

1 id: 1000&lt;br /&gt;
2 id: 1001&lt;br /&gt;
3 id: 1002&lt;br /&gt;

the section was shown.

   </pre>
</div>
</div>
<br class="example-break">
</div>
<div class="sect2" title="total">
<div class="titlepage"><div><div><h3 class="title">
<a name="section.property.total"></a>total</h3></div></div></div>
<p>
   total используется для отображения количества итераций, через которые
   пройдет эта секция. Это свойство может быть использовано как внутри, так
   и вне секции.
  </p>
<div class="example">
<a name="id2676521"></a><p class="title"><b>Example 7.42. свойство {section} total</b></p>
<div class="example-contents">
<pre class="programlisting">

{section name=customer loop=$custid step=2}
  {$smarty.section.customer.index} id: {$custid[customer]}&lt;br /&gt;
{/section}

    There were {$smarty.section.customer.total} customers shown above.

  </pre>
<p>
   Результат выполнения данного примера:
  </p>
<pre class="screen">

0 id: 1000&lt;br /&gt;
2 id: 1002&lt;br /&gt;
4 id: 1004&lt;br /&gt;

There were 3 customers shown above.

   </pre>
</div>
</div>
<br class="example-break"><p>
   См. также
   <a class="link" href="language.function.foreach.html" title="{foreach},{foreachelse}">{foreach}</a>
   и
   <a class="link" href="language.variables.smarty.html#language.variables.smarty.loops" title="{$smarty.section}, {$smarty.foreach}">$smarty.section</a>.
  </p>
</div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="language.function.php.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="language.builtin.functions.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="language.function.strip.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">{php} </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> {strip}</td>
</tr>
</table>
</div>
</body>
</html>