【问题标题】:Yii Bootstrap widget non based on modelYii Bootstrap 小部件不基于模型
【发布时间】:2014-08-17 17:13:03
【问题描述】:

渲染任何不基于模型的 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 3 外观的 CHtml 内容吗?
  • 是的。这不是我在第三段中所说的吗? :]

标签: php twitter-bootstrap yii yii-extensions


【解决方案1】:

好吧,Bootstrap 依赖于标记和类,我所做的是复制 Bootstrap 所需的相同标记并通过 htmlOptions 的数组将类添加到元素中。

这是我做的一个例子(有些词是西班牙语),它是一个带有一些下拉和输入框的水平形式,观察我如何传递引导类:

  • 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() ?>

【讨论】:

    【解决方案2】:

    到目前为止,我提出的唯一解决方案是在我看来直接复制 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>
    

    讨厌,但它正在工作。不过,我想看看其他一些选项。

    【讨论】:

      猜你喜欢
      • 2013-04-27
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多