GeraJet
@GeraJet
Anykey

Как применить Pjax для частичного обновления страницы?

Приветствую всех.
Есть action
public function actionIndex($id = 1)
    {
        $employees = Employee::find()
            ->orderBy(['name' => SORT_ASC]) 
            ->all();

        $emp = Employee::findOne($id);

        return $this->render('index', [
            'employees' => $employees, 
            'emp' => $emp
            ]);
    }

На странице слева будет вертикальное меню с сотрудниками, в правой части я хочу вывести информацию о них, но без перезагрузки страницы. Сначала хотел сделать с помощью renderAjax, но ничего не вышло. Теперь пытаюсь сделать с Pjax. Вот вьюшка:
<div class="site-index">
    <div class="body-content">
        <div class="row">
            <div class="col-lg-2">
                <p>
                <?php foreach ($employees as $employee) {
echo "<a href=# onclick=\"$.pjax.reload('#pjaxId', {timeout : false});\">".$employee->name."</a><br /><br />";                
                    }
                ?>
                </p>
            </div>
            <div class="col-lg-9">

                <?php Pjax::begin(['id' => 'pjaxId']); 

                    echo $this->render('_view', ['emp' => $emp]);

                Pjax::end(); ?>

            </div>
        </div>
    </div>
</div>

_view.php
<div class="employee-view" id="pjaxId">
    <?= $emp->name;  ?>
</div>

Понимаю, что какая-то чушь получается во вьюшке, целый день уже над этим бьюсь.
  • Вопрос задан
  • 314 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
обверните все что есть во вью в Pjax
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
Проблема в том что в pjax.reload в качестве идентификатора Pjax-контейнера, который необходимо перезагрузить, Вы используйте $employee->id. Т.е. по сути дела сейчас у Вас один контейнер с идентификатором $emp->id, а при формировании ссылок Вы указываете идентификаторы вообще не существующих контейнеров. Зачем в качестве идентификатора Pjax-контейнера Вы используете $emp->id в чем сакральный смысл? Просто укажите в качестве идентификатора контейнера постоянное значение например
Pjax::begin(['id' => 'employee-detail']
и при pjax.reload используйте его, а не $employee->id
Ответ написан
Ваш ответ на вопрос

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

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