@AlexAll

Как с помощью ajax подгружать поля формы в зависимости от выбора категории в Yii2?

При создании поста
У меня установлен виджет 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 и если все ок то в выводит дополнительный код пришедший с /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 ставлю в нужное место внутри <?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 как один пост запрос?
  • Вопрос задан
  • 993 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
public function actionPostSpecifics(){
    if(Yii::$app->request->isAjax){
        $model = new Post();
        $model->load(Yii::$app->request->post());
        $category_id = $model-> category_id;   
        
        $form = new \yii\widgets\ActiveForm;
        
      return $this->renderAjax('form_specifics', [
          'model' => $model ,
          'category_id' => $category_id,
          
          'form' => $form
          
      ]);       
    }
}

В файле form_specifics используете $form обычным способом
echo $form->field($model, 'attribute_name')->textInput();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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