• Как заново подгрузить файл с JavaScript при повторном AJAX-рендере одного и того же view-файла, содержащего ссылку на данный JavaScript-файл?

    @parazitl2 Автор вопроса
    Вопрос решился следующим образом:

    <?php
    $this->registerJsFile(
        '/basic_yii/web/scripts/resource/computer.js?n=' . uniqid(),
        ['depends'=>'app\assets\AppAsset']
    );
    ?>


    До этого пробовал $.ajaxSetup({cache: false});, не помогало. А вышеупомянутый код заставляет файл загружаться в кэш заново, все работает.
    Ответ написан
  • Как передать параметр в action в YII2?

    @parazitl2
    Например, данные поля из формы передаем методом post:

    Форма во view-файле:
    <?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'name')->textInput() ?>   
    <?= Html::submitButton('Создать', ['class' => 'btn btn-success']) ?>        
    <?php ActiveForm::end(); ?>


    При нажатии на кнопку формируется POST, отлавливаем его в контроллере:

    public function actionSomeAction()
        {
            $model = new SomeForm();
    
            if ($model->load(Yii::$app->request->post())) {
                ... делаем что нужно ...
            }
    
            return $this->render('someview', [
                'model' => $model,
            ]);
        }
    Ответ написан
    Комментировать
  • Как сделать динамическую подгрузку данных при выборе пункта из выпадающего списка формы в Yii2?

    @parazitl2 Автор вопроса
    Решил проблему как написал Станислав Казанин.

    Выпадающий список, при выборе пункта из которого будет обновляться поле на странице с данными пользователя (id списка например "useridfield") :
    <?php echo $form->field($model, 'user_id')->widget(Select2::classname(), [        
            'data' => ArrayHelper::map(User::find()->all(), 'id', 'username'),
            'language' => 'ru',
            'options' => ['placeholder' => 'Выберите пользователя ...', 'id' => 'useridfield', 'value' => Yii::$app->user->identity->getId(),],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ])->label('Автор заявки'); ?>

    Сам блок на этой же странице, в котором обновляются данные пользователя (id поля, например, "newtry"):

    <div id="newtry">
            <?= $this->render('/user/_userdataview', [
                'model' => Yii::$app->user->identity,
            ]); ?>
    </div>

    А это скрипт (решил пока оставить его внизу страницы, потом можно вынести в отдельный файл), который выполняет всю данную работу:

    <?php 
    $script = <<< JS
       
    $('#useridfield').change(function(){
        $.ajax({
            type: "GET",
            url: "/basic_yii/web/user/showuserdata?user_id="+$(this).val(),
            success: function(data) {
                $("#newtry").html(data)
            }
        })
    });
            
    JS;
    $this->registerJs($script);
    ?>

    В скрипте $('#useridfield') - это id поля формы с выпадающим списком (указано в массиве options), $("#newtry") - это id специально отгороженного тегами div поля, которое полностью обновляется при клике на выпадающий список, а по адресу /basic_yii/web/user/showuserdata?user_id= лежит экшен контроллера:

    public function actionShowuserdata($user_id)
        {
            $model = \app\models\User::findIdentity($user_id);
                   
            return $this->renderPartial('_userdataview', [
                'model' => $model,
            ]);
        }


    Надеюсь, это кому-нибудь пригодится =)
    Ответ написан
    Комментировать