====== Теги форм и элементов форм ====== MACRO содержит средства для решения проблемы автозаполнения полей формы после submit-а в том случае, если отправленные данные содержали ошибки (ошибки валидации). Стоит, правда, отметить, что в последнее время все большую популярность набирают различные средства для проведения валидации на стороне клиента или при помощи Ajax-запросов. Тем не менее, в данном разделе мы осветим некоторые моменты использования тегов группы FormTags, которые умеют генерить html-аналоги тегов форм и элементов форм. Итак, группа тегов FormTags используется для следующих целей: * для повторного заполнения полей формы после отправки и ее повторном отображении * для отображения ошибок валидации * в качестве helper-ов для генерации html-кода, например, тег %%{{select}}%% и %%{{select_options_export}}%% Какие наиболее важные теги из группы FormTags существуют: * [[limb3:ru:packages:macro:tags:form_tags:form_tag|Тег {{form}}]] - аналог тега
. Основная функция - выступать в качестве контейнера данных для дочерних элементов форм, а также в качестве контейнера ошибок валидации. * [[limb3:ru:packages:macro:tags:form_tags:form_errors_tag|Тег {{form:errors}}]] - используется для того, чтобы "вытащить" ошибки валидации из формы в локальную переменную, которую затем можно будет использовать в теге %%{{list}}%% для вывода ошибок валидации. * [[limb3:ru:packages:macro:tags:form_tags:input_tag|Тег {{input}}]] - аналог тега . Поддерживает различные типы и исходя из типа меняет свою логику работы. * [[limb3:ru:packages:macro:tags:form_tags:select_tag|Тег {{select}}]] - аналог тега тегов Предположим, что у нас есть вот такой MACRO-шаблон: {{form name="my_form" method="POST"}} {{form:errors to='$fields_errors'/}} {{list using='$fields_errors'}} Errors:
    {{list:item}}
  1. {$item.message}
  2. {{/list:item}}
{{/list}} 10, 'name' => 'TypeA'), array('id' => 20, 'name' => 'TypeB')); ?> {{select_options_export from="$types" to="$types_as_options" key_field="id" text_field="name"/}}
{{label for="title" error_class="error"}}Title{{/label}} {{input type="text" id="title" name="title" title="Title" error_class="error"/}} {{select name="type" id="type" title="Type" options="$types_as_options" error_style="style_of_error"/}}
{{/form}}
Пусть у нас где-то есть php-скрипт, который используется этот шаблон. При помощи этого скрипта мы продемонстрируем, как формы повторно получают данные: 'Error in {field}', 'fields' => array('field' => 'title')); $error_list[] = array('message' => 'Other error in {field}', 'fields' => array('field' => 'type')); $macro->set('form_my_form_error_list', $error_list); $macro->set('form_my_form_datasource', $_POST); } echo $macro->render(); ?> При первом запуске этого скрипта мы получим:
Теперь попробуем заполнить поля и отправить форму. Мы должны получить нечто подобное:
Errors:
  1. Error in Title
  2. Other error in Type
Обратите внимание, что [[limb3:ru:packages:macro:tags:form_tags:label_tag|тег {{label}}]] для первого поля ввода сгенерил