Несколько Pjax блоков на странице. Работает только первый. Второой перезагружает страницу.

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

Несколько Pjax блоков на странице. Работает только первый. Второой перезагружает страницу.

Сообщение ILjaPHP »

День добрый!
Проблема с pjax. Он вообще рассчитан на 2 блока на странице? Блоки имеют разные ID. Второй блок работает неверно: страница перезагружается!

Pjax блок сделан в виде Yii2 виджета. Виджет просто вызывается дважды на странице!
Код основной функции виджета:

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

 
 public function run()
{
$id_performer = $this->id_performer;
$id_city = $this->id_city;
$QueryItems = City::getItemsByPerformer($id_performer, $id_city);

$countQuery = clone $QueryItems;
$allCount = $countQuery->count();

$haveMoreButton = \Yii::$app->params['perPage'] < $allCount;

$items = $QueryItems->limit(\Yii::$app->params['perPage'])->all();
return $this->render('items_widget', compact('items', 'haveMoreButton', 'id_performer', 'id_city'));
}
И код основного файла вида:

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

<?php $pjax = Pjax::begin(['enablePushState' => false, 'timeout' => false]);
$pjaxId = $pjax->getId();
$pjax->linkSelector = '#link' . $pjaxId;
?>
<?php if (!empty($items)) : ?>
<?php foreach ($items as $item): ?>
<?php include __DIR__ . '/../catalog-item.php'; ?>
<?php endforeach; ?>
<?php if (isset($haveMoreButton) && $haveMoreButton): ?>
<div>
<?= Html::a('Show More', ['/site/pjax-news', 'limit' => (isset($limit) ? $limit : (\Yii::$app->params['perPage'] * 2)), 'id_performer' => (isset($id_performer) ? $id_performer : 0),'id_city' => (isset($id_city) ? $id_city : 0)],
['class' => 'btn big dark button_show_more', 'id' => 'link' . $pjaxId, 'data-pjax' => 1]); ?>
</div>
<?php endif; ?>
<?php endif; ?>
<?php Pjax::end(); ?>
Очень жду ваших идей!
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Несколько Pjax блоков на странице. Работает только первый. Второой перезагружает страницу.

Сообщение urichalex »

Pjax::begin(['enablePushState' => false, 'timeout' => false, 'id' => 'pjax-container-one']);
Pjax::begin(['enablePushState' => false, 'timeout' => false, 'id' => 'pjax-container-two']);
ILjaPHP
Сообщения: 2
Зарегистрирован: 2019.11.19, 14:54

Re: Несколько Pjax блоков на странице. Работает только первый. Второой перезагружает страницу.

Сообщение ILjaPHP »

Зачем? Он сам отлично формирует разный ID при каждом запуске - проверял через php и в выводе html видны разные id у pjax блоков - p0 и p1.
Есть код который работает с ID как вы видите. И от него по моему тоже толку никакого нет:

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

$pjaxId = $pjax->getId();
$pjax->linkSelector = '#link' . $pjaxId;
Ответить