Yii2 Создание сложного виджета с использованием pjax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
x516dF
Сообщения: 17
Зарегистрирован: 2017.07.11, 10:01

Yii2 Создание сложного виджета с использованием pjax

Сообщение x516dF »

Создаю виджет, с использованием Pjax, с помощью которого можно пошагово забронировать номер в отеле. На первом шаге выбирается отель, на втором тип комнаты, на третьем остальные дополнительные опции. После каждого шага данные отправляются на контроллер (frontend/controllers/PjaxController) и возвращается измененная модель для виджета. Проблема в том, что при таком подходе приходится каждый раз генерировать данные, которые используются на странице, на которой отображается виджет. Пример:

Код: Выделить всё

//Файл frontend/controllers/SiteController

public function actionIndex()
{
    ...
    $news = News::getNews();
    $slider = Slider::getAll();

    return $this->render('/site/index', [
        'news' => $news,
        'slider' => $slider,
        ...
    ]);
}

//Файл frontend/controllers/PjaxController

public function actionHotel()
{
    ...
    $news = News::getNews();
    $slider = Slider::getAll();

    return $this->render('/site/index', [
        'news' => $news,
        'slider' => $slider,
        ...
        ...
    ]);
}

// Файл common/widgets/ReservationWidget.php

public function run()
{
    ...
    return $this->render('reservation-view', [
        'model' => $this->model,
    ]);
}
Как видно, на странице site/index, на которой вызывается виджет, используются некоторые данные, такие как $news, $slider и другие. И каждый раз в контроллере в котором происходят какие-либо действия, связаные с виджетом (PjaxController), мне нужно генерировать такие же $news и $slider, иначе на вьюхе произойдёт ошибка типа "Unknown $news ...", т.к. по сути перерисовывается вся страница. Таким образом контроллер-обработчик виджета тесно связан с view файлом, на котором находится этот виджет, т.к. в нём постоянно генерируются данные из этой вьюхи и рендер данной вьюхи. Есть ли возможность рендерить и перерисовывать только виджет из такого контроллера-обработчика?
sosnovskiy
Сообщения: 239
Зарегистрирован: 2017.03.28, 20:03

Re: Yii2 Создание сложного виджета с использованием pjax

Сообщение sosnovskiy »

Выделите отображение и получение $news и $slider в виджеты
sosnovskiy
Сообщения: 239
Зарегистрирован: 2017.03.28, 20:03

Re: Yii2 Создание сложного виджета с использованием pjax

Сообщение sosnovskiy »

sosnovskiy писал(а): 2017.07.11, 16:48 Выделите отображение и получение $news и $slider в виджеты
Оберните в pjax только то что должно изменятся (ваш виджет) а не всю страницу целиком
x516dF
Сообщения: 17
Зарегистрирован: 2017.07.11, 10:01

Re: Yii2 Создание сложного виджета с использованием pjax

Сообщение x516dF »

sosnovskiy писал(а): 2017.07.11, 16:48 Выделите отображение и получение $news и $slider в виджеты
пробовал - не получается. эти данные нужны ещё до того как начинает перерисовываться виджет
x516dF
Сообщения: 17
Зарегистрирован: 2017.07.11, 10:01

Re: Yii2 Создание сложного виджета с использованием pjax

Сообщение x516dF »

sosnovskiy писал(а): 2017.07.11, 16:49 Оберните в pjax только то что должно изменятся (ваш виджет) а не всю страницу целиком
всё так и есть, и перерисовывается только та часть, которая обрамлена Pjax-ом, но почему-то для рендера страницы нужны все данные с этой страницы, а не только данные из моего виджета внутри Pjax
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Yii2 Создание сложного виджета с использованием pjax

Сообщение caHek2x »

а зачем вы рендерите всю страницу ? вы ждете чуда что yii сам не будет трогать все что до и после pjax ? вы должны на рендер отправлять только то что внутри пиджака (не обязаны конечно но в вашем случае именно так) ... то есть эту часть вынесите в отдельную вьюшку _pjax_block.php
и renderAjax
Ответить