Lab / YII

Yii2: основы работы с PJAX

PJAX это виджет в Yii2 позволяющий обновлять вам только заданный участок страницы, без перезагрузки всего содержимого. Например вы можете сделать пагинацию в вашем блоге на PJAX.

Вы можете обернуть весь контейнер со списком материалов и при открытии страниц, они будут подгружатся в этот же контейнер практически молниеносно, без перезагрузки всей страницы. Вы даже можете обернуть весь layot сайта в PJAX и тогда по переходу по ссылкам страницы будут открываться практически молниеносно.

Для того, что бы в Yii Framework выполнить какую либо часть кода, вам необходимо подключить класс:

use yii\widgets\Pjax;

и обернуть необходимый код в соответствующий виджет:

<?php Pjax::begin(); ?>
 // ваш код
<?php Pjax::end(); ?>
Эта заметка нужнается в более расширенной теоретической базе. Сегодня же я поделюсь моим базовым примером, как через PJAX выполнить экшен контроллера.

Вызов экшена в контроллере через PJAX

В форме:

<div class="col-sm-12 col-md-6">
 <?php Pjax::begin(); ?>
 <?= Html::a("Новая случайная строка", ['site/multiple'], ['class' => 'btn btn-lg btn-primary']) ?>
 <h3><?= $randomString ?></h3>
 <?php Pjax::end(); ?>
</div>
<div class="col-sm-12 col-md-6">
 <?php Pjax::begin(); ?>
 <?= Html::a("Новый случайный ключ", ['site/multiple'], ['class' => 'btn btn-lg btn-primary']) ?>
 <h3><?= $randomKey ?><h3>
 <?php Pjax::end(); ?>
</div>

В контроллере:

public function actionMultiple()
{
 $security = new Security();
 $randomString = $security->generateRandomString();
 $randomKey = $security->generateRandomKey();
 return $this->render('multiple', [
 'randomString' => $randomString,
 'randomKey' => $randomKey,
 ]);
}

Вариант когда по клику можно обновить Pjax

<?php
 $this->registerJs(
 '$("document").ready(function(){
 $(".myButtom").click(function() {
 $.pjax.reload({container:"#payments"}); //Reload GridView
 });
 });'
 );
?>
<?php yii\widgets\Pjax::begin(['id' => 'new_payment']) ?>
// Some code
<?php yii\widgets\Pjax::end(); ?>