Как правильно вывести дополнителные поля ActiveForm с помощью ajax исходя из выбранной категории

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alexa777
Сообщения: 299
Зарегистрирован: 2016.03.01, 17:38

Как правильно вывести дополнителные поля ActiveForm с помощью ajax исходя из выбранной категории

Сообщение alexa777 »

При создании поста
У меня установлен виджет Select2 от Kartik demos.krajee.com/widget-details/select2
И использую его как Ajax Loading - вводишь 3 буквы и он находит нужную категорию. Надо сделать чтобы после того как категория нашлась и выбрана, вывелось дополнительное поле с радио списком названий сайтов с ссылками.

Код: Выделить всё

<?= $form->field($model, 'site')->radioList(ArrayHelper::map(Site::getSite($category_id), 'link', 'title'),  
            [
                                
        'item' => function($index, $label, $name, $checked, $value) use ($model) {
            $check = $checked == 1 ? "checked='checked'" : null;
            return '<label class="modal-radio" style="display:block;">
                  <input type="radio" name="' . $name . '" value="' . $value . '" ' . $check . ' tabindex="3">
                  <i></i>
                  <span>' . ucwords($label) . '</span>
               </label>';
    }
                            ]
                        ); ?>

Вставляю это поле в отдельный фаил post/form_specifics

Пробую делать с помощью jquery скрипта, когда в Ajax Loading поле находишь и выбираешь категорию срабатывает ajax запрос на /post/post-specifics" и передает Post запросом category_id и если все ок то в <div class="wrapper_post_specifics"> </div выводит дополнительный код пришедший с /post/post-specifics

Код: Выделить всё

jQuery(function ($) {
$(document).on("select2:select", "#post-category_id", function(e) {
    if (($("#post-category_id").val() != null)) { 
                $.ajax({
                    url: "/post/post-specifics",
                    data: {
                        category_id: $("#post-category_id").val(),
                    },
                    method: "POST",
                    beforeSend: function(xhr) {
                        $(".wrapper_post_specifics").html("<h2 class=\"text-center\">Загрузка...</h2>");
                    }
                }).done(function(data) {
                    $(".wrapper_post_specifics").html(data);
                }).fail(function(data) {
                    alert("Во время загрузки Дополнительных полей потока произошла ошибка!");
                });
            }
   
})};


в _form.php ставлю <div class="wrapper_post_specifics"> </div> в нужное место внутри <?php $form = ActiveForm::begin(); ?>

Как правильно зарендерить post/form_specifics в action ? с передачей всех данных?

я пробую так
в контролере Post делаю action

Код: Выделить всё

 public function actionPostSpecifics(){
          $model = new Post();
          $model->load(Yii::$app->request->post());
          $ category_id = $model-> category_id;

    
          return $this->render('form_specifics', [
           'model' => $model ,
            'category_id' => $category_id,
        ]);
    }

Но это не правильно, начинает выводить ошибки что нет переменой form, ставлю <?php $form = ActiveForm::begin(); ?> и end потом ArrayHelper и т.д когда прописываю все use то скрипт срабатывает но выводит post/form_specifics вместо одного поля всю страницу с главным layuot

как сделать actionPostSpecifics чтобы это поле заренедерилось в рамках actionCreate и его <?php $form = ActiveForm::begin(); ?> а потом все передалось в actionCreate как один пост запрос?
Ответить