diff --git a/docs/ru/designers/language-builtin-functions/language-function-capture.xml b/docs/ru/designers/language-builtin-functions/language-function-capture.xml index b2467f39..3aa0afb2 100644 --- a/docs/ru/designers/language-builtin-functions/language-function-capture.xml +++ b/docs/ru/designers/language-builtin-functions/language-function-capture.xml @@ -1,32 +1,26 @@ - + capture - capture используется для того, чтобы присвоить вывод шаблона какой-либо - переменной вместо его вывода на экран. Любое содержание между {capture - name="foo"} и {/capture} сохраняется в переменную, указанную в - атрибуте name. Затем его можно использовать в шаблоне с помощью - специальной переменной $smarty.capture.foo, где foo - значение, - переданное атрибуту name. Если атрибут name не указан, то - используется default. Каждая комманда {capture} должна иметь пару - {/capture}. capture поддерживает вложение. + {capture} используется для того, чтобы собрать результат работы шаблона + в какую-то переменную, вместо того, чтобы вывести результат браузеру. + Любое содержимое между {capture name="foo"} и {/capture} сохраняется в + переменную, указанную в атрибуте name. Затем его можно использовать в + шаблоне при помощи специальной переменной $smarty.capture.foo, + где "foo" - значение, переданное атрибуту name. Если атрибут name не указан, + то используется "default". Каждая комманда {capture} должна иметь пару + {/capture}. Команда capture поддерживает вложенность. - - Техническое замечание - - Smarty 1.4.0 - 1.4.4 помещало захваченный вывод в переменную $return. - С версии 1.4.5 поведение было изменено на использование атрибута name, - так что обновите ваши шаблоны соответственно. - - + - Будте осторожны, сохраняя вывод комманды insert. - Если вы используете кэширование и встречаются команды - insert в области кэширования, то - не сохраняйте данный вывод. + Будте осторожны, сохраняя вывод команды {insert}. + Если вы используете кэширование + и в области кэширования встречаются команды + insert, то не сохраняйте данный вывод. @@ -34,20 +28,47 @@ Сохранение вывода шаблона - - {$smarty.capture.banner} - - - {/if} +{if $smarty.capture.banner ne ''} + + + + +
+ {$smarty.capture.banner} +
+{/if} ]]>
+ + + сохранение содержимого в переменную + + Этот пример также демонстрирует функцию + {popup} + + +help +]]> + + +
+ + См. также + $smarty.capture, + {eval}, + {fetch}, + fetch() + и {assign}.
- + - config_load + {config_load} + + {config_load} используется для загрузки конфигурационных переменных + (#variable#) из + конфигурационных файлов в шаблон. + @@ -65,70 +70,96 @@ - - Эта функция используется для загрузки переменных в - шаблон из файлов конфигруации. Смотри - Файлы конфигурации - для дополнительной информации. - - функция config_load + {config_load} + example.conf + + + + и шаблон -{#pageTitle#} - - - - - - - -
FirstLastAddress
- + + {#pageTitle#|default:"No title"} + + + + + + + + +
FirstLastAddress
+ ]]>
- Файлы конфигурации также могут содержать секции. Можно загрузить + Конфигурационные файлы + могут также содержать секции. Вы можете загружать переменные из определенной секции, указав атрибут - section. + 'section'. Секции файлов конфигурации и встроенная - функция section не имеют ничего общего, кроме - схожего названия. + функция + {section} + не имеют ничего общего, кроме схожего названия. - функция config_load с указанием секции + функция {config_load} с секцией -{#pageTitle#} - - - - - - - -
FirstLastAddress
- + + {#pageTitle#|default:"No title"} + + + + + + + + +
FirstLastAddress
+ ]]>
- + - См. также Конфигурационные файлы и - config_load. + См. $config_overwrite + для массивов конфигурационных переменных. + + + + См. также Конфигурационные файлы, + Конфигурационные переменные, + $config_dir, + get_config_vars() + и + config_load().
- + - foreach,foreachelse + {foreach},{foreachelse} + + Циклы {foreach} являются альтернативой + циклам {section}. + {foreach} используется для прохода по + единственному ассоциативному массиву. + Синтаксис + {foreach} намного проще синтаксиса + {section}, но с другой стороны + его можно использовать только для одного массива. + Каждый тег {foreach} должен иметь пару + {/foreach}. Обязательными параметрами являются + from и item. + Имя цикла {foreach} может быть любым, состоящим из букв, цифр и знаков + подчеркивания. Циклы {foreach} могут быть вложенными + и имена вложенных {foreach} должны быть уникакльными между собой. + Параметр from (обычно - массив значений) + определяет количество итераций цикла {foreach}. + {foreachelse} выполняется в том случае, если + параметр from не содержит значений. + @@ -56,87 +77,121 @@ - - Циклы foreach являются альтернативой - циклам section. Циклы - foreach используются для прохождения - по одному массиву. Синтаксис foreach - намного проще, чем section, но его - можно использовать только для одного массива. - Тэг foreach должен иметь в пару тэг - /foreach. Обязательные параметры - - from и item. Название - цикла foreach может быть любой последовательностью букв, цифр - и знаков подчеркиваний _. Циклы foreach - могут быть вложенные, и имена вложенных циклов должны быть - уникальные. Переменная from (обычно - массив значений) указывает количество итераций цикла. - foreachelse выполняется, если нету значений - в переменной from. - - - foreach + {foreach} - предмет + +assign('custid', $arr); +?> +]]> + + id: {$curr_id}
{/foreach} - -OUTPUT: - -id: 1000
-id: 1001
-id: 1002
]]>
+ + Результат выполнения данного примера: + + + +id: 1001
+id: 1002
+]]> +
- + - foreach key + {foreach} - предмет и ключ + +assign('contacts', array( + array('phone' => '1', + 'fax' => '2', + 'cell' => '3'), + array('phone' => '555-4444', + 'fax' => '555-3333', + 'cell' => '760-1234') + )); +?> +]]> + assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"), - array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234"))); - -*} - {foreach name=outer item=contact from=$contacts} - {foreach key=key item=item from=$contact} - {$key}: {$item}
- {/foreach} +
+ {foreach key=key item=item from=$contact} + {$key}: {$item}<br> + {$key}: {$item}
+ {/foreach} {/foreach} - -OUTPUT: - -phone: 1
-fax: 2
-cell: 3
-phone: 555-4444
-fax: 555-3333
-cell: 760-1234
]]>
+ + Результат выполнения данного примера: + + + + phone: 1
+ fax: 2
+ cell: 3
+
+ phone: 555-4444
+ fax: 555-3333
+ cell: 760-1234
+]]> +
+ + + {foreach} - базы данных (к примеру, PEAR или ADODB) + +assign("contacts", $db->getAssoc($sql)); +?> +]]> + + +{$con.name} - {$con.nick}
+{/foreach} +]]> +
+
- Циклы foreach имеют свои свойства, доступ к которым реализуется через - {$smarty.foreach.foreachname.varname}, где foreachname это название цикла - (значение атрибута name), а varname - имя свойства. + Циклы {foreach} также имеют собственные переменные, которые содержат свойства + {foreach}. + Они обозначаются так: + {$smarty.foreach.foreachname.varname} + {$smarty.foreach.foreachname.varname}, где foreachname - это название цикла + (значение атрибута name). + + + См. {section} + для примеров следующих свойств, так как они идентичны. + iteration - Количество отработанных итераций. - - - Отсчет начинается с 1 и увеличивается на единицу на каждой итерации. + iteration используется для отображения текущего номера итерации цикла. + Итерации всегда начинаются с 1 и увеличиваются на одну при каждом + прохождении цикла. @@ -168,11 +223,16 @@ cell: 760-1234
total total хранит количество итераций цикла. - Может быть использовано как в цикле, так и вне его.. + Может быть использовано как в цикле, так и вне его. - + + См. также {section} и + $smarty.foreach. + +
+ - + - if,elseif,else + {if},{elseif},{else} Конструкция {if} в Smarty такая же гибкая, как и - аналогичная конструкциия в PHP, только с несколько расширенными - возможностями. + конструкция + if в PHP, + только с несколькими дополнительными возможностями для шаблонов. Каждый тэг {if} должен иметь пару {/if}. {else} и {elseif} так же допустимы. Досутпны все квалификаторы + и функции из PHP, такие как ||, or, - &&, and и т.д. + &&, and, + is_array() и т.д. @@ -141,11 +144,11 @@ - Конструкция if - + {if} statements + 0 or $amount < 1000 ) and $volume >= #minVolAmt#} +{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#} ... {/if} @@ -195,8 +200,10 @@ ... {/if} -{* проверяет, является ли $var чётным двум, например -0=чётно, 1=чётно, 2=нечётно, 3=нечётно, 4=чётно, 5=чётно и т.д. *} +{* + проверяет, является ли $var чётным двум, например + 0=чётно, 1=чётно, 2=нечётно, 3=нечётно, 4=чётно, 5=чётно и т.д. +*} {if $var is even by 2} ... {/if} @@ -205,6 +212,18 @@ {if $var is even by 3} ... {/if} + +{* ------- if с функциями PHP ------- *} +{* check for array. *} +{if is_array($foo) } + ..... +{/if} + +{* проверка на существование *} +{if isset($foo) } + ..... +{/if} + ]]> diff --git a/docs/ru/designers/language-builtin-functions/language-function-include-php.xml b/docs/ru/designers/language-builtin-functions/language-function-include-php.xml index 7daa8cf1..8cd9dda7 100644 --- a/docs/ru/designers/language-builtin-functions/language-function-include-php.xml +++ b/docs/ru/designers/language-builtin-functions/language-function-include-php.xml @@ -1,8 +1,22 @@ - + - include_php + {include_php} + + Техническое замечание + + {include_php} достаточно устарела в Smarty, вы можете достичь этой + функциональности при помощи собственных функций шаблона. + Единственная причина для использования {include_php} - это серьёзная + необходимость отделить PHP-функцию от директории + plugins + или кода вашего приложения. См. примеры составных шаблонов + для дополнительной информации. + + + @@ -46,24 +60,19 @@ + - Тэг include_php используется для подключения php скрипта в шаблон. - Если security включен, то php скрипт должен быть расположен в папке - $trusted_dir. Тэг include_php должен иметь атрибут "file", который - указывает путь подключаемого php файла (относительный к - $trusted_dir или абсолютный путь). + Тэги {include_php} используются для подключения PHP-скрипта в шаблон. + Если режим security включен, + то PHP-скрипт должен быть расположен в директории + $trusted_dir. + Тэг {include_php} должен иметь атрибут "file", который + указывает путь к подключаемому PHP-файлу, либо относительный к + $trusted_dir, + либо абсолютный путь. - include_php это хороший способ для управления компонентными шаблонами, - держать PHP код вне файлов шаблонов. Допустим, у вас есть шаблон, - который выводит навигацию сайта, информация о которой динамически - загружается из базы данных. Вы можете хранить php файл, который - получает данные из базы данных, в отдельной папке и подключать его - в начале шаблона. Теперь можно подключать этот файл шаблона в любом - месте, не волнуясь о происхождении информации (база данных или нет). - - - По умолчанию, php файлы подключаются только один раз, даже если + По умолчанию, PHP-файлы подключаются только один раз, даже если вызываются несколько раз в шаблоне. Можно указать, что файл должен быть подключен каждый раз, указав атрибут once. Установив once в ложь (false) указывает, что файл должен быть @@ -72,41 +81,48 @@ Можно указать опциональный атрибут assign, который указывает имя переменной, которой будет присвоен вывод - include_php вместо отображения. + {include_php}, вместо отображения. - Объект smarty доступен в подключаемом php файле как $this. + Объект smarty доступен в подключаемом PHP-файле как $this. - функция include_php - + Функция {include_php} + load_nav.php + query("select * from site_nav_sections order by name",SQL_ALL); - $this->assign('sections',$sql->record); +// загружает переменные из БД MySQL и присваивает их шаблону +require_once("MySQL.class.php"); +$sql = new MySQL; +$sql->query("select * from site_nav_sections order by name",SQL_ALL); +$this->assign('sections',$sql->record); ?> - - -index.tpl ---------- - -{* абсолютный путь или относительный относительно $trusted_dir *} +]]> + + index.tpl + +{$curr_section.name}
+ {$curr_section.name}
{/foreach} ]]>
+ + + См. также + {include}, + {php}, + {capture}, + Ресурсы + и + Составные шаблоны +
- + - include + {include} + + Тэги {include} используются для включения других шаблонов в текущий. + Любые переменные, доступные в текущем шаблоне, доступны и во + включаемом. Тэг {include} должен иметь атрибут "file", который + указывает путь к ресурсу шаблона. + + + Опциональный атрибут assign указывает, что + результат выполнения {include} будет присвоен переменной вместо отображения. + + @@ -46,28 +57,26 @@ - - Тэги include используются для включения других шаблонов в текущий. - Любые переменные, доступные в текущем шаблоне, доступны и во - включаемом. Тэг include должен иметь атрибут "file", который - указывает имя ресурса шаблона. - - - Опциональный атрибут assign указывает, что - вывод шаблона будет присвоен переменной вместо отображения. - + - функция include + Функция {include} + + {$title} + + + {include file='page_header.tpl'} + {* тут идёт тело шаблона *} + {include file="$tpl_name.tpl"} <-- заменит $tpl_name его значением + {include file='page_footer.tpl'} + + ]]> + Вы также можете передать переменные в подключаемый шаблон в виде атрибутов. Любая переменная, переданная в подключаемый @@ -76,40 +85,90 @@ существующими переменными с аналогичными именами. - функция include: передача переменных + передача переменных в {include} + + где header.tpl может быть + + + + +

{$title}

+ + + +]]> +
+
+ + + {include} и присвоение переменной + + Этот пример присвоит содержимое nav.tpl переменной $navbar, + которая затем выводится сверху и снизу страницы. + + + +{include file='nav.tpl' assign=navbar} +{include file='header.tpl' title='Main Menu' table_bgcolor='#effeef'} +{$navbar} + +{* тут идёт тело шаблона *} + +{include file='footer.tpl' logo='http://my.example.com/logo.gif'} +{$navbar} + ]]> - Для подключения файлов вне папки $template_dir можно - указывать файл с помощью ресурсов. + Для подключения файлов вне папки + $template_dir + можно указывать файл с помощью + ресурсов. - функция include: пример использвоания ресурсов + Примеры ресурсов шаблонов в {include} + + + См. также + {include_php}, + {php}, + Ресурсы and + Составные шаблоны. + +
- + - insert + {insert} + + Тэг {insert} очень похож на тэг {include}, + за исключением того, что {insert} НЕ кэшируется, когда + кэширование включено. + Он будет выполнен при каждом обращении к шаблону. + + @@ -54,57 +62,50 @@ + - Тэг insert очень похож на тэг include, кроме случая, когда - кэширование включено. Insert - тэг не кешируется. Он будет выполнен каждый раз, при обращении - к шаблону. - - - Допустим вы имеете шаблон с баннером вверху страницы. - Баннер может содержать любую смесь HTML, исзображенй, + Допустим, вы имеете шаблон с баннером вверху страницы. + Баннер может содержать любую смесь HTML, изображений, flash и т.д., то есть нельзя использовать просто статическую ссылку, и мы не хотим, чтобы код баннера кэшировался с остальной страницей. Тогда используем - тэг insert: шаблон знает значения #banner_location_id# и - #site_id# (взяты из файла конфигурации) и должен вызвать - функцию, чтобы получить код баннера. + тэг {insert}: шаблон знает значения #banner_location_id# и + #site_id# (взяты из конфигурационного файла) + и должен вызвать функцию, чтобы получить код баннера. - функция insert + функция {insert} - В этом примере мы используем имя "getBanner" и передаем параметры - #banner_location_id# и #site_id#. Smarty попробует вызывать + #banner_location_id# и #site_id#. Smarty попробует вызвать функцию insert_getBanner() в вашей PHP программе, передав значения #banner_location_id# и #site_id# первым параметром в виде ассоциативного массива. Все имена функций вставки должны начинаться с "insert_" для предотвращения возможных конфликтов имен. Функция insert_getBanner() должна обработать переданные переменные и - вернуть результат. Он будет отображен в шаблоне вместо тэга insert. + вернуть результат. Он будет отображен в шаблоне вместо тэга {insert}. В данном случае Smarty вызовет функцию insert_getBanner(array("lid" => "12345","sid" => "67890")); и выведет результат на месте тэга - insert. + {insert}. Если указан атрибут "assign", то вывод функции вставки будет присвоен указанной переменной вместо отображения. ЗАМЕЧАНИЕ: - присвоение вывода тэга insert переменной шаблона не очень - полезно, когда кеширование включено. + присвоение вывода тэга {insert} переменной шаблона не очень + полезно, когда кеширование включено. - Если указан атрибут "script", то указанный php файл будет + Если указан атрибут "script", то указанный PHP-файл будет подключен (только однажды) перед вызовом функции вставки. Это удобно, когда функция может не сущетсвовать, и должен быть - подключен php файл, чтобы определить функцию. Путь к файлу + подключен PHP-файл, чтобы определить функцию. Путь к файлу должен быть либо абсолтным, либо относительным относительно - $trusted_dir. Когда security активирована, то php файл должен + $trusted_dir. Когда security активирована, то PHP-файл должен быть в папке $trusted_dir. @@ -117,7 +118,7 @@ Некоторые части шаблона можно не кэшировать. Если активировано кэширование, - то тэг insert все равно не будет кэширован. Он будет вызван + то тэг {insert} все равно не будет кэширован. Он будет вызван каждый раз при генерации страницы, даже из кешированных страниц. Это полезно для таких вещей, как баннеры, опросы, прогнозы погоды, результаты поиска, области обратной связи diff --git a/docs/ru/designers/language-builtin-functions/language-function-ldelim.xml b/docs/ru/designers/language-builtin-functions/language-function-ldelim.xml index b91b741b..d4347281 100644 --- a/docs/ru/designers/language-builtin-functions/language-function-ldelim.xml +++ b/docs/ru/designers/language-builtin-functions/language-function-ldelim.xml @@ -1,19 +1,19 @@ - + - ldelim,rdelim + {ldelim},{rdelim} - ldelim и rdelim используются для отображения разделителей. - В нашем случае это "{" и "}". Вы можете использовать блок + {ldelim} и {rdelim} используются для + предотвращения обработки разделителей, + по-умолчанию "{" и "}". Вы также можете использовать блок {literal}{/literal} для - экранирования блоков текста. + предотвращения обработки блоков текста. См. также - {$smarty.ldelim} и - {$smarty.rdelim} + {$smarty.ldelim} - ldelim, rdelim + {ldelim}, {rdelim} + Другой пример и немного javascript'а + + +function foo() {ldelim} + ... code ... +{rdelim} + +]]> + + выведет + + +function foo() { + .... code ... +} + +]]> + + См. также diff --git a/docs/ru/designers/language-builtin-functions/language-function-literal.xml b/docs/ru/designers/language-builtin-functions/language-function-literal.xml index f05eeccc..0df0d976 100644 --- a/docs/ru/designers/language-builtin-functions/language-function-literal.xml +++ b/docs/ru/designers/language-builtin-functions/language-function-literal.xml @@ -1,38 +1,36 @@ - + - literal + {literal} - Тэги literal позволяют воспринимать блоки данных буквально. + Тэги {literal} позволяют воспринимать блоки данных буквально. Обычно они используются вместе с javascript или таблицами стилей, в которых фигурные скобки конфликтуют с синтаксисом разделителей. Весь текст внутри тэгов {literal}{/literal} не интерпретируется, а выводится - "как есть". Если вам нужно вставить тэги шаблонов в блок literal, вам следует - пойти по другому пути и использовать {ldelim}{rdelim} для экранирования отдельных разделителей. - тэг literal + тэги literal - - - - + {/literal} ]]> diff --git a/docs/ru/designers/language-builtin-functions/language-function-php.xml b/docs/ru/designers/language-builtin-functions/language-function-php.xml index 106133c0..c25635c9 100644 --- a/docs/ru/designers/language-builtin-functions/language-function-php.xml +++ b/docs/ru/designers/language-builtin-functions/language-function-php.xml @@ -1,27 +1,60 @@ - + - php + {php} - Тэг php позволяет вставлять php код прямо в шаблон. Он не + Тэг {php} позволяет вставлять PHP-код прямо в шаблон. Он не будет как-либо изменен, независимо от $php_handling настроек. Этот тэг только для продвинутых пользователей, так как обычно не требуется. - тэг php + тэги {php} + + + Техническое замечание + + Для доступа к переменным PHP внутри блоков {php}, вам может понадобится + использовать ключевое слово PHP + global + + + + + Тэги {php} с глобальными переменными + + + + + + + См. также + $php_handling, + {include_php}, + {include} + и + Компонентные шаблоны. + + - + - section,sectionelse + {section},{sectionelse} + + Секции используются для обхода + массивов данных + (так же, как и {foreach}). + Каждый тег {section} должен иметь пару + {/section}. Обязательными параметрами являются + name и loop. Имя цикла + {section} может быть любым, состоящим из букв, цифр и знаков + подчеркивания. Циклы {section} могут быть вложенными + и имена вложенных {section} должны быть уникакльными между собой. + Переменная loop (обычно - массив значений) + определяет количество итераций цикла. + При печати переменных внутри секции, имя секции должно быть указано + рядом с именем переменной внутри квадратных скобок []. + {sectionelse} выполняется в том случае, если + параметр loop не содержит значений. + + @@ -78,83 +96,145 @@ - - Секции используются для обхода массива данных. Все тэги - section должны иметь в пару тэг - /section. Обязательные параметры: - name и loop. Имя - секции может быть какой угодно последовательностью букв, - цифр и знаков подчеркиваний. Секции могут быть вложенными. - Имена вложенных секций должны отличаться друг от друга. - Переменная цикла (обычно массив) определяет количество итериций - цикла. Когда отображаем переменную цикла, имя секции должно - быть указана после имени переменной в квадратных скобках []. - Тэг sectionelse выполняется, когда - переменная цикла пуста. - + - section - + {section} + -{/section} +assign('custid',$data); -id: 1000
-id: 1001
-id: 1002
+?> ]]>
+ + +{/section} +
+{* этот пример напечатает все значения массива $custid в обратном порядке *} +{section name=foo loop=$custid step=-1} + {$custid[foo]}
+{/section} +]]> +
+ + Результат выполнения данного примера: + + + +id: 1001
+id: 1002
+
+id: 1002
+id: 1001
+id: 1000
+]]> +
+ + Ещё немного примеров без присвоенного массива. + + + +{section name=bar loop=21 max=6 step=-2} + {$smarty.section.bar.index} +{/section} +]]> + + + Результат выполнения данного примера: + + + +20 18 16 14 12 10 +]]> +
- section loop variable - + Переменная loop команды {section} + - name: {$name[customer]}
- address: {$address[customer]}
-

-{/section} +assign('custid',$id); -OUTPUT: +$fullnames = array('John Smith','Jack Jones','Jane Munson'); +$smarty->assign('name',$fullnames); -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
-

+$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st'); +$smarty->assign('address',$addr); + +?> ]]> + + + id: {$custid[customer]}
+ name: {$name[customer]}
+ address: {$address[customer]} +

+{/section} +]]> +
+ + Результат выполнения данного примера: + + + + 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 +

+]]> +
- имена секций + именование {section} - name: {$name[mydata]}
- address: {$address[mydata]}
-

+{* + имя секции может быть любым, так как оно используется для обращения к + данным в пределах секции +*} +{section name=anything loop=$custid} +

+ id: {$custid[anything]}
+ name: {$name[anything]}
+ address: {$address[anything]} +

{/section} ]]>
@@ -162,111 +242,207 @@ address: 5605 apple st
вложенные секции - + - name: {$name[customer]}
- address: {$address[customer]}
- {section name=contact loop=$contact_type[customer]} - {$contact_type[customer][contact]}: {$contact_info[customer][contact]}
- {/section} -

-{/section} +assign('custid',$id); -OUTPUT: +$fullnames = array('John Smith','Jack Jones','Jane Munson'); +$smarty->assign('name',$fullnames); -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
-

+$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} +]]> +
+ + Результат выполнения данного примера: + + + + 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
+]]> +
секции и ассоциативные массивы + + '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); + +?> +]]> + - home: {$contacts[customer].home}
- cell: {$contacts[customer].cell}
- e-mail: {$contacts[customer].email}

+

+ name: {$contacts[customer].name}
+ home: {$contacts[customer].home}
+ cell: {$contacts[customer].cell}
+ e-mail: {$contacts[customer].email} +

{/section} +]]> +
+ + Результат выполнения данного примера: + + + + 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 +

+]]> +
+ Базы данных (например, PEAR или ADODB) + +assign('contacts',$db->getAll($sql) ); -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

+?> +]]> + + + + + Name>HomeCellEmail +{section name=co loop=$contacts} + + view + {$contacts[co].name} + {$contacts[co].home} + {$contacts[co].cell} + {$contacts[co].email} + +{/section} + ]]> - sectionelse + {sectionelse} + id: {$custid[customer]}
{sectionelse} - there are no values in $custid. + there are no values in $custid. {/section} ]]>
- Секции также имеют свои собственные атрибуты, которые определяют - определенные настройки секции. Они указываются примерно так: - {$smarty.section.sectionname.varname} + Секции так же имеют собственные переменные, которые содержат свойства секций. + Они обозначаются так: + {$smarty.section.sectionname.varname} - - ЗАМЕЧАНИЕ: Начиная со Smarty версии 1.5.0, синтаксис атрибутов секций - изменился с {%sectionname.varname%} на {$smarty.section.sectionname.varname}. - Старый синтаксис пока поддерживается, но вы встретите только новый стиль в - примерах данного руководства. - - - - index - - index хранит текущий индекс цикла, начиная с 0 (или значения атрибута - start), и увеличивается на единицу (или на значение атрибута step). + + + Начиная с версии Smarty 1.5.0, синтаксис переменных свойств сессий был + изменен с {%sectionname.varname%} на {$smarty.section.sectionname.varname}. + Старый синтаксис всё ещё поддерживается, но вы увидите лишь примеры + нового синтаксиса. + + + + index + + index используется для отображения текущего индекса массива, + начиная с нуля (или с атрибута start, если он был указан) и увеличиваясь + на единицу (или на значение атрибута step, если он был указан). Техническое Замечание @@ -277,318 +453,336 @@ e-mail: jane@example.com

- атрибут секции index + свойства {section} index - {/section} +{* к вашему сведению, $custid[customer.index] и $custid[customer] означают одно и то же *} - - OUTPUT: - - 0 id: 1000
- 1 id: 1001
- 2 id: 1002
+{section name=customer loop=$custid} + {$smarty.section.customer.index} id: {$custid[customer]}
+{/section} ]]> -
-
+ + + Результат выполнения данного примера: + + + +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_prev используется для отображения предыдущего индекса цикла + На первой итерации он установлен в -1. +
- - index_next - - index_next хранит следующий индекс цикла. На последней итерации цикла - будет иметь значение на единицу больше текущего индекса (или на другое + + index_next + + index_next используется для отображения следующего индекса цикла + На последней итерации он всё же на единицу больше текущего (или на другое значение, если указан атрибут step). - - атрибут секции index_next + + свойства {section} index_next и index_prev + +assign('custid',$data); + +?> +]]> + - {* 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} +{* к вашему сведению, $custid[cus.index] и $custid[cus] означают одно и то же *} - - 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
+ + + + + + +{section name=cus loop=$custid} + + + + + +{/section} +
indexidindex_prevprev_idindex_nextnext_id
{$smarty.section.cus.index}{$custid[cus]}{$smarty.section.cus.index_prev}{$custid[cus.index_prev]}{$smarty.section.cus.index_next}{$custid[cus.index_next]}
]]>
-
+ + Результатом выполнения этого примера будет таблица, содержащая следующее: + + + + +
- - iteration + + iteration - iteration хранит текущую итерацию цикла. + iteration используется для отображения текущего номера итерации цикла. - - ЗАМЕЧАНИЕ: Значение не зависит от атрибутов start, step и max, в отличии - атрибута index. Итерации также начинаются с 1, а не с 0, как index. - rownum является синонимом для iteration. - - - атрибут секции iteration - + + + Это значение не зависит от свойств start, step и max, в отличие от + свойства index. + Кроме того, итерации начинаются с единицы, а не с нуля, как индексы. + rownum - это синоним к + свойству iteration, они работают одинаково. + + + + свойство {section} 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} +assign('custid',$id); - 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
+?> ]]>
-
+ + +{/section} +]]> + + + Результат выполнения данного примера: + + + +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
+]]> +
+ + Этот пример использует свойство iteration для + вывода заголовка таблицы через каждые пять строчек + (использует {if} + с оператором 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 имеет значение истина, если текущая итерация цикла - первая. - - - атрибут секции 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
-]]> -
-
+ first + + Параметр first установлен в true, если текущая итерация секции + является первой. +
- - 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, то он будет - отображен. - + + last + + Параметр last установлен в true, если текущая итерация секции + является последней. + - атрибут секции 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} first и last + + Этот пример проходит циклом по массиву $customers, + выводит заголовок на первой итерации и футер на последней + (использует свойство {section} total) + - {/section} +{section name=customer loop=$customers} + {if $smarty.section.customer.first} + + + {/if} - There were {$smarty.section.customer.total} customers shown above. + + + + - OUTPUT: + {if $smarty.section.customer.last} + +
idcustomer
{$customers[customer].id}}{$customers[customer].name}
{$smarty.section.customer.total} customers
+ {/if} +{/section} +]]> +
+
+
+ + + rownum + + rownum используется для отображения текущего номера итерации цикла, + начиная с единицы. Это синоним свойства iteration, они работа идентично. + + + + + loop + + loop используется для отображения последнего номера индекса, по которому + проходила итерация секции. Это свойство может быть использовано как внутри, + так и вне секции. + + + свойство {section} index + + +{/section} - 0 id: 1000
- 2 id: 1001
- 4 id: 1002
+There were {$smarty.section.customer.loop} customers shown above. +]]> +
+ + Результат выполнения данного примера: + + + +1 id: 1001
+2 id: 1002
- There were 3 customers shown above. - ]]> - -
+There were 3 customers shown above. +]]> + +
+ + show + + show используется в качестве параметра секции. + show является булевым значением, true или false. + Если false, секция не будет отображена. Если присутствует секция {sectionelse}, + вместо этого будет отображена она. + + + атрибут {section} show + + +{/section} + +{if $smarty.section.customer.show} + the section was shown. +{else} + the section was not shown. +{/if} +]]> + + + Результат выполнения данного примера: + + + +2 id: 1001
+3 id: 1002
+ +the section was shown. +]]> +
+
+
+ + + total + + total используется для отображения количества итераций, через которые + пройдет эта секция. Это свойство может быть использовано как внутри, так + и вне секции. + + + свойство {section} total + + +{/section} + + There were {$smarty.section.customer.total} customers shown above. +]]> + + + Результат выполнения данного примера: + + + +2 id: 1002
+4 id: 1004
+ +There were 3 customers shown above. +]]> +
+
+ + См. также + {foreach} + и + $smarty.section. + +
- + - strip + {strip} Часто вебдизайнеры сталкиваются с проблемой, что пробелы и переносы строк влияют на отображение HTML в броузере ("фишки" броузера), то @@ -24,33 +24,37 @@ - тэг strip + тэги {strip} +
- + This is a test - +
{/strip} - - -OUTPUT: - -
This is a test
]]>
+ + Результат выполнения данного примера: + + +
- + Приступая к работе @@ -152,8 +152,8 @@ Базовая установка - Скопируйте файлы Smarty, которые находятся в директории /libs/ - дистрибутива. Редактировать эти файлы НЕ СЛЕДУЕТ. Они должны + Скопируйте файлы Smarty, которые находятся в субдиректории /libs/ + дистрибутива. Редактировать эти PHP-файлы НЕ СЛЕДУЕТ. Они должны использоваться всеми приложениями и изменяться только при обновлении Smarty до новой версии. @@ -171,15 +171,16 @@ debug.tpl - Smarty использует константу PHP + Smarty использует константу PHP SMARTY_DIR, которая указывает - путь к директории 'libs/' Smarty. Обычно, если ваше приложение может + полный путь к директории 'libs/' Smarty. + Обычно, если ваше приложение может найти файл Smarty.class.php, то нет необходимости устанавливать SMARTY_DIR - Smarty сам во всём разберётся. Однако, если Smarty.class.php не может быть найден в вашем include_path или вы не указывали абсолютный путь к нему в приложении, то вы должны определить SMARTY_DIR вручную. - SMARTY_DIR должен включать завершающий слэш. + SMARTY_DIR должен включать завершающий слэш. Вот как следует создавать экземпляр объекта Smarty в ваших PHP-скриптах: @@ -189,8 +190,9 @@ debug.tpl ]]> @@ -203,40 +205,54 @@ $smarty = new Smarty; - Укажите абсолютный путь к директории Smarty + Ручная установка константы SMARTY_DIR ]]> - Добавьте директорию Smarty к include_path + Передача абсолютного пути к файлам библиотеки ]]> - Установите значение константы SMARTY_DIR вручную + Добавление файлов библиотеки к include_path PHP ]]> @@ -245,7 +261,7 @@ $smarty = new Smarty; Теперь, когда все файлы находятся на своих местах, пришло время установки директорий Smarty в вашем приложении. Smarty требует - четыре директории, которые (по умолчанию) называются + четыре директории, которые по умолчанию называются 'templates/', 'templates_c/', 'configs/' и @@ -315,12 +331,12 @@ $smarty = new Smarty; Файловая структура примера Нам необходимо создать файл 'index.tpl', которы будет загружаться Smarty. - Он будет расположен в вашей + Он будет расположен в $template_dir. @@ -383,7 +399,7 @@ chmod 770 /web/www.example.com/smarty/guestbook/cache/ {* Smarty *} -Hello, {$name}! +Привет, {$name}! Добро пожаловать в Smarty! ]]> @@ -402,10 +418,8 @@ Hello, {$name}! Теперь давайте отредактируем 'index.php'. Мы создадим экземпляр Smarty, - присвоим значение переменной шаблона и отобразим файл 'index.tpl'. - В условиях нашего примера, мы поместили "/usr/local/lib/php/Smarty" в - include_path. Убедитесь, что вы сделали то же самое или используете - абсолютные пути. + присвоим значение переменной шаблона и + отобразим файл 'index.tpl'. @@ -415,16 +429,16 @@ Hello, {$name}! template_dir = '/web/www.example.com/smarty/guestbook/templates/'; $smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/'; $smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/'; $smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/'; -$smarty->assign('name','Ned'); +$smarty->assign('name', 'Кристина'); $smarty->display('index.tpl'); ?> @@ -446,8 +460,9 @@ $smarty->display('index.tpl'); - Теперь загрузите файл index.php из вашего - веб-браузера. Вы должны увидеть надпись "Hello, Ned!" + Теперь перейдите к файлу index.php при помощи вашего + веб-браузера. Вы должны увидеть надпись + "Привет, Кристина! Добро пожаловать в Smarty!" Вы закончили базовую установку Smarty!