@SlimSavernake

Как динамически добавлять нужные поля через ajax в yii2?

Есть объявления "Недвижимость", в которых для разных типов недвижимости используются разные поля. Например "площадь участка" показывается только для домов или дач, для квартир, гаражей не показывается. Сейчас они просто скрываются с помощью jquery (display: none), а хотелось бы полностью удалять поля и загружать только нужные через ajax.
Где и как нужно хранить эти поля?
  • Вопрос задан
  • 539 просмотров
Решения вопроса 1
@SlimSavernake Автор вопроса
Короче разделил сущности, как сказали. И загружаю в модальное окно всю форму нужного типа недвижимости.

<?php Modal::begin([
    'size' => 'modal-md',
    'header' => '<h4 class="modal-title">Добавление объявления</h4>',
    'toggleButton' => [
        'tag' => 'button',
        'class' => 'btn btn-primary',
        'id' => 'modal-button',
        'label' => 'Добавить объявление',
    ]
]); ?>

<div class="form-horizontal">
    <div class="form-group">
        <label class="col-lg-4 control-label">Тип недвижимости</label>
        <div class="col-lg-7">
            <select id="rform" class="form-control">
                <option value>Выберите тип недвижимости</option>
                <option value="0">Квартира</option>
                <option value="1">Дом/Часть дома</option>
            </select>
            <div class="help-block"></div>
        </div>                                        
    </div>
</div>
<div class="modal-form"></div>
<?php Modal::end(); ?>

<script>var url = '<?= Url::to(['realty/default/showform']); ?>';</script>

<?php
$script = <<< JS
$(document).ready(function(){
    $('#rform').on('change', function() {
        var val = $('#rform').val();
        $.ajax({
            type: 'POST',
            url: url,
            data: {type:val},
            beforeSend: function(){
                $('.modal-form').html('<div style="text-align:center; margin:10px"><img src="loading.gif" /></div>');
            },
            success: function(data){
                $('.modal-form').html(data);
            }
        });
    });
});



JS;
$this->registerJs($script, View::POS_END);
?>


Контроллер
public function actionShowform()
    {
        if (Yii::$app->request->isAjax) {
            $type = $_POST['type'];
            if ($type == 0) {
                return $this->renderAjax('/apartment/_form', [
                    'model' => new Apartment,
                ]);
            } else if ($type == 1) {
                return $this->renderAjax('/house/_form', [
                    'model' => new House,
                ]);
            }
        } 
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@devian3000
А как храните данные?
А разные ли модели используете для каждого типа объявлений?
В общем это решение не на уровне фреймворка, а над ним.
Формируйте динамические вьюхи в зависимости от типа объектов, можно рефлексией пользоваться, можно внедрить просто Мэппинг, в общем решений куча, выберите по душе.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы