Разделение полей ActiveForm на разные вкладки с помощью виджета "Вкладки"

Я создаю вид формы и хочу организовать поля формы со структурой вкладок, используя официальный виджет вкладок.

Можно ли инициализировать виджет Tabs с идентификатором (или классом) элементов div, содержащих активные поля формы?

3 ответа

Один из примеров того, как вы можете управлять этим, выглядит следующим образом:

  1. Сначала разделите вашу контактную форму на один файл для каждой вкладки.
  2. Поместите ActiveForm::begin() и ActiveForm::end() вокруг Tabs::widget()
  3. Рендеринг страниц контактной формы в контент с параметрами $model и $form

Пример кода:

просмотров / сайт /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>

Надеюсь это поможет!

У меня есть другое решение:

Когда мы звоним $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,
]) ?>

Может быть, это поможет.

Просто добавьте вверху вашей глобальной формы $ contact.php; и все работает отлично.

Другие вопросы по тегам