渲染任何不基于模型的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
。
嗯,Bootstrap依赖于标记和类,我所做的是复制Bootstrap所需的相同标记,并通过 htmlloptions 的数组将类添加到元素中。
这是我做的一个例子(有些词是西班牙语),它是一个水平形式与一些下拉框和输入框,观察我如何传递他们引导类:
- 标签
array('class' => 'col-lg-2 control-label')
-
array('class' => 'form-control')
用于输入控件
下面是一个例子(它包括一个Yii的jQuery UI日期拾取器的例子):
<?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() ?>
到目前为止,我想到的唯一解决方案是在我的视图中直接复制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>
讨厌,但它是有效的。但是,我想看看其他选项