Страница 1 из 1

Кастомизация RadioList yii2

Добавлено: 2017.02.07, 17:09
Jettecs
В стандартном выводе radioList()

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

<?=$form->field($model,'created_at')->radioList(['Radio 1', 'Radio 2', 'Radio 3'],['labelOptions'=>['class'=>'mt-radio'],'name'=>"test"]); ?>
на выходе получаю

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

<div id="users-created_at" name="test" labeloptions="{&quot;class&quot;:&quot;mt-radio&quot;}"><label><input type="radio" name="test" value="0"> Radio 1</label>
<label><input type="radio" name="test" value="1"> Radio 2</label>
<label><input type="radio" name="test" value="2"> Radio 3</label></div>
перопределив шаблон вывода вот таким вот образом

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

Html::beginTag('label', $labelOptions) .
                Html::Tag('input','',$options).
                Html::beginTag('span') .
                Html::endTag('span') .
                Html::endTag('label');
на выходе вместо трех radioButton получаю один

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

<label class="mt-radio"><input type="radio" name="test"]"><span></span></label>
Как можно получить на выходе все что я задаю атрибутами radioList()

Re: Кастомизация RadioList yii2

Добавлено: 2017.02.07, 18:44
rak
а можно код полностью?
каким образом переопределен шаблон?
а то по кускам вроде как все верно, а результат не верный

Re: Кастомизация RadioList yii2

Добавлено: 2017.02.08, 10:02
Jettecs

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

public function radioList($items, $options = [])
    {
                $this->adjustLabelFor($options);
        $this->errorOptions = array_merge(['tag' => 'span'], $this->errorOptions);
        $options['type']="radio";
        $labelOptions = ArrayHelper::remove($options, 'labelOptions');



        if(!empty($labelOptions))
        {
            return
                Html::beginTag('label', $labelOptions) .
                $this->userItems .
                Html::Tag('input','',$options).
                Html::beginTag('span') .
                Html::endTag('span') .
                Html::endTag('label');

        }else{
            return Html::beginTag('label') .
                Html::Tag('input','',$options).
                Html::beginTag('span') .
                Html::endTag('span') .
                Html::endTag('label');
        }

    }
    
Выводится 1 radioButton хотя в параметрах items я задаю 3, как добиться вывода всех вводимых мною параметров

Re: Кастомизация RadioList yii2

Добавлено: 2017.02.08, 16:05
rak
зачем переопределять метод, если и так все можно настроить?

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

<?= $form->field($model, 'created_at')->radioList(['Radio 1', 'Radio 2', 'Radio 3'], [
     'item' => function ($index, $label, $name, $checked, $value) {
            $id = 'my-'. $index;
            return
                Html::beginTag('div') .
                    Html::radio($name, $checked, ['value' => $value, 'id' => $id]) .
                    Html::label($label, $id) . 
                Html::endTag('div');
      },
])->label(false) ?>

Re: Кастомизация RadioList yii2

Добавлено: 2017.02.09, 11:21
Jettecs
Вы видите, что если делать вашим способом, насколько длинная получается инициализация, зачем оно такое надо?

А вот решение как это сделать

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

$customRadioTemplate = "<div class='form-group'><div class='mt-radio-list'>";
            foreach ($items as $item)
            {
                $customRadioTemplate .= Html::beginTag('label', $labelOptions) .
                    $item .
                    Html::Tag('input', '', $options) .
                    "<span></span>" .
                    Html::endTag('label');

            }

            $customRadioTemplate .= "<span class='help-block'></span></div></div>";
            return $customRadioTemplate;