Инструменты пользователя

Инструменты сайта


limb3:ru:packages:macro:tags:form_tags:select_tag

Тег {{select}}

Описание

Расширенная форма html тега <select>. Является потомком lmbMacroFormElementTag. Список опций из тегов <option> генерируется тегом {{select}} на лету во время исполнения шаблона. При этом можно задать список опций в шаблоне явно, а можно задать его при помощи переменной (или комбинировать).

{{select}} самостоятельно помещает нужные опции как выбранные. Для указания выбранных элементов можно использовать атрибут value, или же {{select}} может взять значение соответствующего поля из контейнера данных в родительском теге {{form}}. Если используется <select> с возможностью выбора нескольких элементов (multiple=«true»), то контейнер данных формы для поля <select> должен содержать массив значений. см. пример ниже.

см. также тег {{select_options_export}}, который используется для заполнения переменной для списка опций на этапе выполнения шаблона.

Синтаксис

{{select id='some_id' name='some_name' [multiple] [options="$options_var"] [value="$#selected_value"] [value_field="some_field"]}}
  {{option}}..{{/option}}...
{{/select}}

Содержимое

Обычно список тегов {[option}} или вообще ничего, если список задается при помощи атрибута options.

Атрибуты

  • options - имя переменная, которая содержит массив опций вида array(array(option_key ⇒ option_text), array(option_key ⇒ option_text)…)
  • value - выбранный элемент или массив (объект с ArrayAccess), где есть поле, указанное при помощи value_field
  • value_field - название поля в массиве или объекте, который возвращается при попытке тегом получить свое знаение (по value атрибуту или из родительского тега {{form}}). Cм. пример ниже. По-умолчанию имеет значение id
  • multiple - указывает на возможность указания нескольких выбранных опций
  • Наследованные атрибуты Атрибуты lmbMacroFormElementTag

Как {{select}} определяет выбранный элемент

При выборе одной опции (single)

Этап 1:

  • Если есть атрибут value, то берется его значение.
  • Иначе берется значение из контейнера данных родительского тега {{form}} по runtime_id тега (используйте совпадающие атрибуты id и name для таких случаев).
  • Если оба вышеуказанных варианта не дали значение, используется значение по-умолчанию, которое может быть определено при помощи дочернего тега {{option}}

Этап 2:

  • Если значение скалярное, то оно и будет использовано
  • Если значение - массив или объект с интерфейсом ArrayAccess, когда будет из этого массива пробовать взять поле с именем, которое определяется атрибутом value_field (по-умолчанию, просто id)

При выборе нескольких опции (multiple)

Этап 1: Такой же как и для single

Этап 2:

  • Если значение - скаляр - используется значение по-умолчанию
  • Если значение объект, но он не поддерживает интерфейс Iterator, то используется значение по-умолчанию
  • Потом осущесвляется проход по полученному значению.
    • Если элемент массива или итератора - скаляр, то он кладется в конечный массив
    • Если элемент массива или итератор - массив или объект с ArrayAccess, то из него берется поле в соответствие со значением атрибута value_field

Пример использования

Single select

<? $options = array('ff0000' => 'red', '00ff00' => 'green');
   $selected_value_object = new lmbObject(array('my_color' => '00ff00', 'id' => 'ff0000')); ?>
{{select id="my_select" options="$options" value="$selected_value_object" value_field="my_color"/}}

Получим:

<select id="my_select" name="my_select">
 <option value="ff0000">red</option>
 <option value="00ff00" selected="true">green</option>
</select>

Multiple select

<? $options = array('ff0000' => 'red', '00ff00' => 'green', '0000ff' => 'blue');
   $selected_value = array('00ff00', '0000ff'); ?>
 
{{select id="my_select" name="my_select[]" multiple="true" options="$options" value="$selected_value"/}}

Получим:

<select id="my_select" name="my_select[]" multiple="true">
<option value="ff0000">red</option>
<option value="00ff00" selected="true">green</option>
<option value="0000ff" selected="true">blue</option>
</select>

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  __  __   __    _  __  _____   _  __
 / / / /  / /   / |/ / / ___/  / |/ /
/ /_/ /  / /__ /    / / (_ /  /    / 
\____/  /____//_/|_/  \___/  /_/|_/
 
limb3/ru/packages/macro/tags/form_tags/select_tag.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)