====== Использование select тегов. ====== тег без runtime-компонента (runat='client') ===== Если вы используете Однако в этом случае у вас не будет возможности динамически указать, какая опция является выбранной. ==== Использование тегов ==== При использовании тегов вы можете сформировать предварительно массив с данными, на основе которого будет сформирован список опций. Этом случае можно будет использовать теги и для проверки и выставления атрибута //selected//: Или же, если мы сразу будет формировать правильным образом поле //selected// в наборе данных для тега, можно будет записать короче: Где-то вне шаблона у вас будет следующий код (в него можно будет легко включить код, который будет помечать нужные элементы как selected): $data = array(array('value' => 1, 'title' => 'Sergant', 'selected' => ''), array('value' => 2, 'title' => 'Captain', 'selected' => 'checked'), array('value' => 3, 'title' => 'General', 'selected' => '')); $dataset = new lmbCollection($data); lmbToolkit :: instance()->getView()->set('select_options', $dataset); Основное неудобство - необходимость формирования атрибута //selected//, хотя безусловно для этой функциональности можно легко создать средства, упрощающие работу. ==== Использование php-вставок ==== Ничего не мешает так использовать php-код для формирования html-кода: ===== ==== Явная передача опций в runtime-компонент ==== При использовании runtime-компонента содержимое допускает выделение только 1 опции, и в контейнере с данными есть соответствующее поле, тогда опция с совпадающим //value// будет помечена как //selected//, например: $template = new Template('my_template.html') $select = $template->findChild('rank_selector'); $options = array(1 => 'Sergant', 2 => 'Captain', // будет отображен как checked 3 => 'General'); $select->setChoices($options); $form = $template->findChild('my_form'); $datasource = new lmbSet('rank_selector' => 2); $form->registerDataSource($datasource); В результате в шаблоне получим что-то вроде:
==== Использование тега ==== Для передачи данных, на основе которых строится список опций, можно также использовать тег [[.:tags:form_tags:select_options_source_tag|]]. Обратите внимание на возможность использования атрибутов default_id и default_name, которые можно использовать для добавления так называемой опции по-умолчанию. также позволяет использовать атрибут **from**, то есть забирать набор данных из другого контейнера данных шаблона, например:
===== Группировка опций. Использование тега ===== Иногда появляется необходимость группировка опций, доступных для выбора в рамках тега:
Для заполнения списка опций можно использовать метод registerDataset(): $options = array(array('label' => 'Names', 'options' => array(5 => 'Ivan', 10 => 'Mike')), array('label' => 'Last Names', 'other_option' => 'any_value', 'options' => array(1 => 'Voronov', 2 => 'Kirov'))); $select = $template->getChild('my_selector'); $select->registerDataset(new lmbCollection($options)); Обратите внимание на форму, в которой должны формироваться данные для тега. Это итератор, где каждый элемент содержит атрибут //label// и //options//, а последний - это обычный массив, где ключ - это атрибут value тега