• Как отобразить часть контента используя Pjax yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    У Вас есть выпадающий список
    <select name="spjax" id="spjax">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>

    Где-то в другом месте страницы есть блок, который надо обновить. При обновлении к заголовку необходимо добавить значение переменной $Ipjax. Оборачиваем этот блок Pjax и добавляем пользовательский js.
    <?php
       Pjax::begin([
           'id' => 'view-mode-pjax'
       ])
    ?>
    <div class="col-lg-4">
        <h2>Heading <?= $Ipjax ?></h2>
    
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
            dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
            ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
            fugiat nulla pariatur.</p>
    
        <p><a class="btn btn-default" href="http://www.yiiframework.com/doc/">Yii Documentation &raquo;</a></p>
    </div>
    <?php
      Pjax::end();
    $this->registerJs("
    $(function(){
      $('#spjax').on('change', function(){
        var Id = $(this).val()
        console.log(Id)
        $.pjax.reload({
            container: \"#view-mode-pjax\", // контейнер, в котором надо обновить данные.
            url: window.location.href,
            timeout: 0,
            data: {
               'id': Id // данные, которые отправляются на сервер.
            },
        });
      })  
    })    
    ", View::POS_END)
    ?>

    А в контроллере, в действии, которое подключает данный вид передаёте нужную переменную.
    public function actionIndex()
    {
        $Ipjax = Yii::$app->request->get('id') ?: null;
        return $this->render('index', ['Ipjax' => $Ipjax]);
    }

    Отлавливаете изменение выпадающего списка и запускаете pjax. Идёт запрос на сервер, проверяется переменная и возвращается всё тот же вид, но уже с переменной.
    И Pjax, ушлый зверёк, обновит не всю страницу, а только тот блок, который Вы укажите.

    p.s. Пример сделан на yii2-basic, в файле views/index и в DefaultController.
    Ответ написан