Как с помощью pjax обновить все кроме одного блока внутри pjax?

В Yii можно использовать pjax для обновления содержимого страницы без перезагрузки всей страницы. Для обновления только конкретных блоков внутри pjax-контейнера можно использовать следующий подход.

Для начала, убедитесь, что у вас установлен пакет yii2-pjax. Если он еще не установлен, выполните следующую команду в командной строке вашего проекта:

composer require yiisoft/yii2-pjax

После установки yii2-pjax вы можете использовать его функциональность в представлениях вашего приложения.

Для того чтобы обновить все блоки, кроме одного, внутри pjax-контейнера, вам необходимо задать id для этого контейнера. Этот id будет использоваться в качестве идентификатора для обновления блоков с помощью AJAX.

Ниже приведен пример кода:

use yiiwidgetsPjax;

Pjax::begin(['id' => 'my-pjax-container']); // указываем id для pjax-контейнера

echo '<div id="block1">Блок 1</div>';
echo '<div id="block2">Блок 2</div>';
echo '<div id="block3">Блок 3</div>';

Pjax::end();

Веб-страница будет содержать три блока (block1, block2, block3) внутри контейнера my-pjax-container.

Теперь, когда ваш пjax-контейнер настроен, вы можете обновить все блоки, кроме одного, с помощью следующего кода JavaScript:

$.pjax.reload({container: '#my-pjax-container', skipOuterContainers: true, scrollTo: false});

В этом коде мы использовали метод $.pjax.reload, чтобы обновить содержимое pjax-контейнера. Параметр container указывает идентификатор контейнера, который нужно обновить. Параметр skipOuterContainers задает, что блоки внутри контейнера должны быть обновлены, но не должны повлиять на сам контейнер. Параметр scrollTo определяет, должно ли окно прокручиваться к контейнеру после обновления.

Таким образом, с использованием pjax и указав только контейнер, который должен быть обновлен, вы можете обновить все блоки внутри него, кроме одного, без необходимости перезагрузки всей страницы.