myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Как лучше сделать глобальную форму?

Хочу сделать форму в модальном окне. Она будет присутствовать на каждой странице и вызываться по id. Данные отправляются на почту через ActiveForm. Я поместил вот такой код в "layouts/main", то есть в футер страницы, таким образом у меня форма присутствует на каждой странице. Скажите, на сколько это правильное решение? Или есть более правильный метод. Поделитесь...

<?php
$model = new ContactForm();
Modal::begin([
    "size"=>"modal-sm",
    "options"=>[
        "id"=>"leads",
    ],
    'header' => '<h2>Запись на занятие</h2>',
]);?>
<div class="row">
    <div class="col-lg-12">
        <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

        <?= $form->field($model, 'name')->textInput(['autofocus' => true]) ?>

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

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

        <?= $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-9">{input}</div></div>',
        ]) ?>

        <div class="form-group">
            <?= Html::submitButton( Yii::t('frontend','Submit'), ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
        </div>

        <?php ActiveForm::end(); ?>
    </div>
</div>

<?php Modal::end();?>
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
Как по мне приведенное Ваши решение не правильное, потому что:
1. Создание модели (пусть даже для формы) в представлении это ни разу не тру. Представление должно получать модель, а не создавать ее. Иначе это уже не MVC.
2. Наличие формы на каждой странице (а соответственно и всех html, js) только увеличивает размер страницы и уменьшает ее скорость загрузки. Это не оправдано с учетом того что пользователь может этой формой вообще не воспользоваться, да и открывать ее на каждой странице, в процессе работы с сайтом, он ее не будет.

Гораздо оптимальнее сделать подгрузку формы при открытии модалки (из коробки бутстраповская модалка позволяет это сделать)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Bandicoot
@Bandicoot
Вась-программист
В целом верно, можно также сделать виджетом, чтобы не загромождать шаблон
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы