使用Tabs小部件将ActiveForm字段拆分为不同的选项卡

时间:2015-02-02 11:34:35

标签: yii2 yii-widgets

我正在创建表单视图,并且我想使用官方标签小部件来组织带有标签结构的表单字段。

是否可以使用包含活动表单字段的div元素的id(或类)初始化Tabs小部件?

3 个答案:

答案 0 :(得分:3)

如何管理它的一个例子就是:

  1. 首先,将您的联系表格划分为每个标签的一个视图文件。
  2. 围绕Tabs :: widget()放置ActiveForm :: begin()和ActiveForm :: end()
  3. 使用参数$ model和$ form
  4. 将联系表单页面呈现为内容

    示例代码:

    视图/站点/ contact.php

    <?php
    
    /* @var $this yii\web\View */
    $this->title = 'Contact';
    
    use yii\bootstrap\Tabs;
    use yii\bootstrap\ActiveForm;
    ?>
    
    
    <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
    <?= Tabs::widget([
            'items' => [
                [
                    'label' => 'One',
                    'content' => $this->render('contact_form1', ['model' => $model, 'form' => $form]),
                    'active' => true
                ],
                [
                    'label' => 'Two',
                    'content' => $this->render('contact_form2', ['model' => $model, 'form' => $form]),
                ],
            ]]);
     ?>
        <?php ActiveForm::end(); ?>
    

    视图/站点/ contact_form1.php

    <?= $form->field($model, 'name') ?>
    <?= $form->field($model, 'email') ?>
    <?= $form->field($model, 'subject') ?>
    

    视图/站点/ contact_form2.php

    <?php
    use yii\helpers\Html;
    use yii\captcha\Captcha;
    ?>
    
    <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
    <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
        'template' => '<div class="row"><div class="col-lg-3">{image}</div><div    class="col-lg-6">{input}</div></div>',
    ]) ?>
    <div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
    </div>
    

    希望这有帮助!

答案 1 :(得分:0)

只需在contact.php global $ form的顶部添加;一切正常。

答案 2 :(得分:0)

我有另一个解决方案:

当我们调用$form->field($model, 'name')->textInput()时,它将返回类yii\widgets\ActiveField的模型,因此只需继续调用此类的方法$form->field($model, 'name')->textInput()->render()。它将返回一个字符串,然后您可以将其用于选项卡的内容。 我的应用程序中有一个示例代码,用于翻译多语言,如下代码所示:

<?php
$items = [];
foreach ($translateModels as $translateModel) {
    $tabContent = $form->field($translateModel, "[{$translateModel->code}]name")->textInput()->render();
    $items[] = [
        'label' => $translateModel->language->name,
        'content' => $tabContent,
    ];
}
?>
<?= Tabs::widget([
    'options' => [
        'class' => 'nav-tabs',
        'style' => 'margin-bottom: 15px',
    ],
    'items' => $items,
]) ?>

也许这有帮助。