渲染任何不基于模型的Yii-Bootstrap小部件的最佳方法(如果有的话)是什么?
我有一个所有模型属性的创建/更新表单,现在我想添加一个额外的下拉列表,让用户从纯数组中选择一些与当前模型无关的值。
换句话说,我正在寻找等价的CHtml::dropDownList
,这样我就可以在Yii-Bootstrap情绪中呈现这个特定的列表,就像我表格中的所有其他元素一样。
到目前为止,我试图介绍包含对Yii::app()->controller->widget('bootstrap.widgets.input.TbInputHorizontal', array());
的直接调用的自己的帮助方法。但那失败了。所有Yii-Bootstrap小部件和方法似乎都没有模型和属性而死亡。
我还尝试重载TbInputHorizontal::dropDownList()
并强制使用CHtml::dropDownList
代替$this->form->dropDownList
,但我不知道如何强制TbActiveForm
使用我的TbInputHorizontal
小部件而不是{{1}}。
答案 0 :(得分:1)
好吧,Bootstrap依赖于标记和类,我所做的就是复制Bootstrap所需的相同标记,并通过 htmlOptions 的数组将类添加到元素中。
这是我做的一个例子(有些单词是西班牙语),它是一个水平形式,带有一些dropDowns和Input框,观察我如何传递它们的bootstrap类:
array('class' => 'col-lg-2 control-label')
标签array('class' => 'form-control')
用于输入控件以下是示例(它包含Yii的jQuery UI datepicker的示例):
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'subscriber-form',
'htmlOptions' => array('class'=>'form-horizontal'),
)); ?>
<fieldset>
<legend>Datos del usuario</legend>
<div class="form-group">
<?php
echo CHtml::label('Pasarela de pago','gateway', array(
'class' => 'col-lg-2 control-label'
))
?>
<div class="col-lg-2">
<?php
echo CHtml::textField('gateway',$gateway, array(
'id'=>'gateway',
'class' => 'form-control', 'disabled'=>'true'
));
?>
</div>
</div>
<div class="form-group">
<?php
echo CHtml::label('Fecha de suscripción','subscriptionDate', array(
'class' => 'col-lg-2 control-label'
))
?>
<div class="col-lg-2">
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker',array(
'name'=>'subscriptionDate',
'attribute'=>'subscriptionDate',
'language'=>'es',
'options'=>array(
'showButtonPanel'=>true,
'dateFormat'=>'dd/mm/yy',
'maxDate'=>'0',
),
'htmlOptions'=>array(
'class'=>'form-control'
),
));
?>
</div>
</div>
<div class="form-group">
<?php echo CHtml::label('Estado','status', array(
'class'=>'col-lg-2 control-label'
));
?>
<div class="col-lg-2">
<?php
echo CHtml::dropDownList('status', $status, $statusList , array(
'class'=>'form-control'
));
?>
</div>
</div>
<div class="col-lg-3 col-lg-offset-2">
<?php echo CHtml::submitButton('Guardar cambios', array(
'class'=>'btn btn-primary'
)) ?>
<a class="btn btn-default" href="<?php echo Yii::app()->urlManager->createUrl('admin/suscriptores'); ?>">Cancelar</a>
</div>
</fieldset>
<?php $this->endWidget() ?>
答案 1 :(得分:0)
我到目前为止唯一的解决方案是在我看来直接复制Yii-Bootstrap样式:
<?php $fieldName = 'Boards['.$type.']'; ?>
<div class="control-group">
<div class="controls">
<div class="input-prepend">
<span style="width: 215px; text-align: left" class="add-on">
<label for="<?php echo $fieldName; ?>"><?php echo ucfirst($committees['boards']['roles'][$type]); ?></label>
</span>
<?php echo CHtml::dropDownList($fieldName, $committee, $committees['boards']['names'], array('style'=>'width: 650px')); ?>
</div>
</div>
</div>
讨厌,但它正在发挥作用。但是,我想看看其他一些选择。