2015-09-25 3 views
0

Внутри вариант тега мне нужно добавить пядь тег, а код должен выглядеть следующим образом:Yii2 ActiveForm - DROPDOWNLIST сделать шаблон для {вход}

<option><span class=flag></span></option> 

мне нужно поставить имя флага, как параметр второго класса диапазона. Вещь, которую мне нужно назначить, - currency_code. Это текущий код:

<?php 
    echo $form->field($model, 'currency', [ 
      'template' => '<label>{label}</label>{input}{hint}' 
     ]) 
     ->dropDownList([NULL => ''] + ArrayHelper::map(app\models\Currency::find()->all(), 'currency_code', 'currency_code'), ['role' => 'currency_code'])->hint('Select preferred currency.') 
    ?> 

Как это сделать?

ответ

1

Это поможет вам

$listData=['1'=>'value1', '2'=>'value2', '3'=>'value3']; 

$options= 
[ 
'1' => ['disabled' => true], 
'2' => ['label' => 'some other label2'], 
'3' => ['class' => 'someclass'], 
]; 

echo $form->field($model, 'attribute')->dropDownList(
$listData, 
['prompt'=>'Select...', 'options'=>$options]); 

, который будет производить некоторые выберите HTML-код, как этот

<select name="Model[attribute]" class="form-control" id="model-attribute"> 
<option value="">Select...</option> 
<option disabled="" selected="" value="1">value1</option> 
<option label="some other label2" value="2">value2</option> 
<option value="3" class="someclass">value3</option> 
</select> 

так с параметрами, которые вы можете установить параметры ListData (ListItems)

Редактировать:

$listData=ArrayHelper::map(Organizer::find()->all(), 'id', 'name'); 
$listData=['1'=>'<span>some html added</span>', '2'=>'value2', '3'=>'value3']; 
$options= 
[ 
'1' => ['disabled' => true], 
'2' => ['label' => 'some other label2'], 
'3' => ['class' => 'someclass', 'value'=>'<span>some html added</span>'], 
]; 

echo $form->field($model, 'organizer_id')->dropDownList(
           $listData, 
           ['prompt'=>'Select...','encode'=>true,'options'=>$options]); 

вернется

<select name="Poll[organizer_id]" class="form-control" id="poll-organizer_id"> 
<option value="">Select...</option> 
<option disabled="" selected="" value="1">&lt;span&gt;some html added&lt;/span&gt;</option> 
<option label="some other label2" value="2">value2</option> 
<option value="3" class="someclass">value3</option> 
</select> 

, к сожалению, если я отключить кодирование будет отображаться только текст и HTML нет ... Но я думаю, там должен быть способ сделать это.

Редактировать2: Я выяснил, почему это не сработало в опции, никакие другие теги не разрешены (см.: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option). Итак, мое первое решение было правильным. Вы должны иметь возможность добавлять свои значки флагов к опции фоном-изображением.

+0

Это даже не близко к тому, что мне нужно: /. Мне нужно поместить тег span внутри тега опций, добавить назначенный класс в span со значением от ArrayHelper – Sasha

+0

Да, я тоже просто видел это, было слишком быстро с чтением sry. Я предполагаю, что тогда ваш единственный вариант - расширить BaseHtml :: dropDownList или расширить static :: renderSelectOptions ($ selection, $ items, $ options); потому что это функции, возвращающие параметры. Я не нашел возможности изменить «текст» в этой функции по какой-либо опции. – BHoft

+0

только что добавил, но все же не правильный вариант. – BHoft

Смежные вопросы