@AlexKuznec

Внутри pjax 2 виджета, как добиться обновления только одного из них?

Я хочу добиться динамического отображения содержимого вкладок.
Каждая вкладка представляет собой дату, при клике на нее из базы должны подгружаться соответствующие записи. Так как вкладок много, воспользовался плагином для организации прокрутки, примерно как сверху у браузеров. Сами вкладки тоже формируются через запрос к базе (из записей выбираются уникальные даты) и являются ссылками.

Если кратко - то внутри pjax находятся 2 виджета: список дат и GridView.
Кликая на первых вкладках создается впечатление, что всё хорошо :) В большинстве случаев данные обновляются без видимой перезагрузки. Но в случае прокрутки полосы с вкладками обнаруживается, что она каждый раз обновляется - отображаются первые вкладки, и затем прокручиваются до выбранной (так на js прописано).

Вопрос - как кликая по ссылке добиться того, чтобы сам виджет со ссылками попутно не обновлялся?

Вот часть кода из вида:
// на основании выборки из базы в цикле формируется массив вкладок для виджета
$items[] = [
        'label' => $label,
        'url' => ['event/index', 'EventSearch[usertime]' => $date],
        'active' => $active,
    ];

<?php Pjax::begin() ?>

    <?= ScrollTabs::widget([    // вкладки с датами сверху
        'items' => $items,
    ]) ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
        ...
        ],
    ]); ?>

<?php Pjax::end(); ?>


И действие контроллера:
public function actionIndex()
    {
        $searchModel = new EventSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $pagination = (new \yii\db\Query()) // выдает список дат, когда у данного пользователя имеются записи; записи в дальнейшем группируются по дням
            ->select('CAST(usertime as DATE) as userdate')
            ->from('event')
            ->where(['user_id' => Yii::$app->user->id]) // залогиненный юзер
            ->distinct()
            ->orderBy('userdate DESC');

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'pagination' => $pagination,
        ]);
    }
  • Вопрос задан
  • 469 просмотров
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
у Вас ScrollTabs обернут в Pjax, поэтому он и обновляется, оберните в pjax только grid ну и естесвенно нужно при клике на ScrollTabs обновлять только pjax-контейнер
<?php Pjax::begin() ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
        ...
        ],
    ]); ?>

<?php Pjax::end(); ?>
Ответ написан
Ваш ответ на вопрос

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

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