Как добавить еще один элемент в шаблон Yii radioButtonList?

Мне нужен RadioButtonList с всплывающей подсказкой после каждого элемента.

Я использую этот код:

<?php echo $form->radioButtonList($model, 'Field', CHtml::listData(FieldDataModel::model()->findAll(), 'id', 'name')); ?>

и получить следующий результат:

[x] ParamName0
[ ] ParamName1
[ ] ParamName2

Как я могу получить такой результат:

[x] ParamName0 [?]-(Link, that shows description. Description is taking from FieldDataModel)
[ ] ParamName1 [?]
[ ] ParamName2 [?]

Может быть, шаблоны типа 'template' => '{input} {label}' могут мне помочь?


person llvk    schedule 09.04.2013    source источник


Ответы (2)


Это невозможно с текущей реализацией. Вам нужно перебрать данные списка и создать кнопки вручную с помощью CHtml::radioButton() или CHtml::activeRadioButton().

person Michael Härtl    schedule 09.04.2013

В качестве альтернативного решения вы все еще можете использовать CActiveForm и динамически создавать необходимые ссылки с описаниями. Например, это может выглядеть так:

<?php
$listModels = FieldDataModel::model()->findAll();
$form = $this->beginWidget('CActiveForm');
?>
<div>
<?php
echo $form->radioButtonList($model, 'Field', CHtml::listData($listModels, 'id', 'name'));
?>
</div>
<?php
$this->endWidget();

$descriptions = array();
foreach ($listModels as $listModel)
    $descriptions['id-' . $listModel->id] = $listModel->description;
$modelClassName = get_class($model);
Yii::app()->clientScript->registerScript("customRadioButtonListInit", "
    var descriptions = " . CJavaScript::encode($descriptions) . ";
    jQuery('#" . $modelClassName . "_Field input[type=\"radio\"]').each(function() {
        var valueAttr = jQuery(this).attr('value');
        var jqLabel = jQuery(this).next('label');
        var jqTooltipLink = jQuery('<a></a>')
            .text('?')
            .attr('title', descriptions['id-' + valueAttr])
            .click(function(event) {
                event.preventDefault();
                event.stopPropagation();
                // TODO: implement your tooltip here...
                alert(jQuery(this).attr('title'));
            });
        jqLabel.after(jqTooltipLink).after(' ');
    })
", CClientScript::POS_READY);
person ezze    schedule 09.04.2013