@Oklick

Как в элемент формы Yii2 добавить свой тег?

Доброго времени суток.
На сайте имеется такой участок кода:
<?php
    $form = ActiveForm::begin();
    foreach ($categoryParams as $v) {
        $inputParams = $paramsArray[$v];
        ?>
        <div class="filterParam_<?= $v ?> filterParam">
            <?php
            $inp = $form->field($modelGoods, $v);
            switch ($inputParams['user_type']) {
                case 'checkbox':
                    $inp->checkboxList($inputParams['label_values'], ['encode' => false]);
                    break;
                case 'radio':
                    $inp->radioList($inputParams['label_values'], ['encode' => false]);
                    break;
                case 'input':
                default:
                    $inp->textInput(['maxlength' => true]);
            }
            echo $inp->label($inputParams['label_user']);
            ?>
        </div>
        <?php
    }
    ?>


Выдает он такой html:

<div class="filterParam_sex filterParam">
<div class="form-group field-goods-sex">
<label class="control-label">
<span>Пол</span> <span></span> <span>Очистить</span>
</label>
<input type="hidden" name="Goods[sex]" value="">
<div id="goods-sex">
<label><input type="checkbox" name="Goods[sex][]" value="1"> Все</label>
<label><input type="checkbox" name="Goods[sex][]" value="2"> Мужской</label>
<label><input type="checkbox" name="Goods[sex][]" value="3"> Женский</label>
<div class="help-block">
</div>
</div>        
</div>


Вроде бы все хорошо, но проблема в том, что мне необходимо что бы input связывался с label по ID и лежал не внутри него, а рядом.
Подскажите, как это сделать? Гуглил, но ответа не нашел. Посмотрел возможность template, но так и не смог сделать с ним то, что мне необходимо.
Заранее благодарен.
  • Вопрос задан
  • 870 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Если я правильно понял, Вам необходимо настроить шаблон отображения чекбоксов внутри checkboxList. К сожалению в yii не предусмотрена возможность настройки одного шаблона для всех чекбосов в checkboxList, но вид каждого чекбокса можно генерировать самостоятельно. Собственно для решения Вашей задачи этим можно и воспользоваться, например так:
$inp->checkboxList($inputParams['label_values'], [
    'encode' => false,
    'item' => function ($index, $label, $name, $checked, $value){            
        $id = "ch{$index}";
        return Html::beginTag('div',['class' =>'checkbox']) . Html::label($label,$id) . Html::checkbox($name,$checked,['id'=>$id]) . Html::endTag('div');             
    } 
]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы