Содержание
Тег {{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>

Обсуждение