Задача: сделать форму из одного поля (selectbox); без multiselect’a; при выборе значения должна происходить автоматическая отправка данных (метод GET); под Yii.
Решение: берем view, в которой надо сделать форму и пишем такое:
<div class="form"> <?php echo CHtml::beginForm(CHtml::normalizeUrl(array('league/view')), 'get'); ?> <?php echo CHtml::endForm(); ?> </div> |
Таким образом создается форма. В beginForm передается action и method. В данном случае, action — это результат работы метода normalizeUrl, а method — просто GET.
В качестве selectbox’a решено было использовать Select2, тем более, что под Yii уже есть обертка Yii-select2. PHP-код для вставки виджета Select2 выглядит так:
<?php $this->widget('Select2', array( 'name' => 'id', 'id'=>'league_id', 'data' => $data, 'htmlOptions'=>array('submit'=>'', 'placeholder'=>'Select league'), )) ?> |
В качестве $data передается ассоциативный массив — значения выводятся в списке, а ключи выступают в роли реальных значений select’a. В htmlOptions задается автосабмит формы (‘submit’=>’ ‘) и плейсхолдер. СтОит сказать, что плейсхолдер появится только, если в массиве $data первый элемент будет пустой (‘ ‘=>’ ‘), иначе — плейсхолдер идет лесом и подставляется первое значение из $data.
Весь код выглядит так:
<div class="form"> <?php echo CHtml::beginForm(CHtml::normalizeUrl(array('league/view')), 'get'); ?> <?php $this->widget('Select2', array( 'name' => 'id', 'id'=>'league_id', 'data' => $data, 'htmlOptions'=>array('submit'=>'', 'placeholder'=>'Select league'), )) ?> <?php echo CHtml::endForm(); ?> </div> |
Вот и все. Кода на копейку, а дело сделано 🙂
autosubmit, php, select2, yii
Оставить комментарий