dropDownList и encode

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Закрыто
worker1950
Сообщения: 8
Зарегистрирован: 2016.04.13, 02:05

dropDownList и encode

Сообщение worker1950 »

Допустим у нас есть массив меток для выпадающего списка, который мы предварительно обработали Html::encode() где нужно и добавили форматирование (ну там цвет, фон, стиль и т.д. для отдельных фрагментов меток) - хотим что бы наши метки выглядели хорошо.
И соответственно при вызове dropDownList указываем 'encode'=>false.

Например:

Код: Выделить всё

$label  = [];
$label[0] = '<b><font color=#868A08>Name</font></b>(Type|<span class="not-set">(not set)</span>)';
echo $form->field($model, 'name')->dropDownList($label,['encode'=>false,]);
Но вот беда: dropDownList в этом случае убирает все наше форматирование.
Вместо 'Name(Type|(not set))' мы увидим в выпадающем списке серое 'Name(Type|(not set)'

Не пойму. Это баг или фича. Если Фича - то как ее обойти? Ну не рихтовать же код Yii.

Версия Yii 2.0.7
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: dropDownList и encode

Сообщение Onotole »

select не обрабатывает html в option
worker1950
Сообщения: 8
Зарегистрирован: 2016.04.13, 02:05

Re: dropDownList и encode

Сообщение worker1950 »

Onotole писал(а):select не обрабатывает html в option
То есть такое поведение считается 'правильным'? Вообще говоря оно очень странное.
И как быть если html форматирование нужно? Отказаться от dropDownList из коробки?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: dropDownList и encode

Сообщение Onotole »

По этому вопросу много ответов и решений
worker1950
Сообщения: 8
Зарегистрирован: 2016.04.13, 02:05

Re: dropDownList и encode

Сообщение worker1950 »

Как понимаю Вы имеете в виду задание форматирования для каждого элемента в селекторе.
Например так:

Код: Выделить всё

$label  = []; $options = [];
$label[0] = '<b><font color=#868A08>Name</font></b>(Type|<span class="not-set">(not set)</span>)';
$options[0] = ['class'=>'MyClass For Label'];
echo $form->field($model, 'name')->dropDownList($label,['encode'=>false, 'options' =>$options]);
 
Но это лишь задает 'общий' стиль для всей метки. При этом исходное форматирование будет сброшено. То есть таким подходом, я могу изменить скажем цвет шрифта всей метки, ее размеры, изменить цвет фона для выделены элементов и т.д. Но не смогу изменить форматирование содержимого метки как показано в исходном примере.

А что если я захочу метку представить в виде мини таблицы, что б данные были акуратно выведены в селекторе? Или использовать panel? Или захочу использовать свою разметку для вывода содержимого? Не уверен что при данном поведении меня CSS-классы спасут.

Хотелось бы простое решение для простой задачи. Странно, что его нет в коробке. А так же единообразие в поведение подобных элементов из коробки.

Например у yii\bootstrap\ButtonDropdown интуитивно понятное поведение. Он с метками не совершает ни каких лишний манипуляций.
worker1950
Сообщения: 8
Зарегистрирован: 2016.04.13, 02:05

Re: dropDownList и encode

Сообщение worker1950 »

Что ж. Значит фича и юзать сторонние реализации. Ок, буду пробовать. Спасибо.
Закрыто