странное поведение Pjax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

странное поведение Pjax

Сообщение long399 »

Всех приветствую. Продолжаю мучить Pjax в связке с виджетом dosamigos\gallery\Gallery.

Уже создавал тему, косвенно относящуюся к вопросу, который изложу в этой теме.

Суть такова: использую виджет Pjax, который почему-то не работает (все ссылки открываются с перезагрузкой страницы) если в layout одного из разделов сайта (Pjax работает для всех вьюшек данного раздела, которые выводятся в layout как content) дописать регистрацию js-кода:

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

$js =<<<JS
dosamigos.gallery.registerLightBoxHandlers('#gallery-widget-users a', {"container":"#blueimp-gallery-users"});
JS;
$this->registerJs($js);
Хотя, если смотреть в консоли разработчика, то js-скрипты для pjax и соответствующая разметка на странице создаются. Но все же работать он не хочет.

Если убираем этот кусочек кода из layout Pjax начинает работать. Но тогда перестает работать открытие фотографий в виджете dosamigos\gallery\Gallery. Никто не подскажет, в чем примерно может быть дело?

P.S. Если потребуется больше кода, готов предоставить.
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: странное поведение Pjax

Сообщение long399 »

Разобрался....... все дело было в недогруженных js-скриптах и стилях, в случае если мы загружаем страницу в любой вьюшке, где не стартует виджет галереи (например вьюшка main, docs и т.д.). Поэтому в layout раздела можно прописать регистрацию нужных для работы галереи ресурсов (до вызова Pjax::begin()):

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

\dosamigos\gallery\GalleryAsset::register($this);
\dosamigos\gallery\DosamigosAsset::register($this);

$js =<<<JS
dosamigos.gallery.registerLightBoxHandlers('#gallery-widget-department a', {"container":"#blueimp-gallery-department"});
JS;
// регистрируем js-код только если изначально загрузили страницу не во вьюшке с виджетом галереи
if($controller->action->id != 'albumphoto') {
    $this->registerJs($js, $this::POS_END);
}
gallery-widget-department и blueimp-gallery-department - это id-шники виджета галереи, с которым мы будем работать, поэтому они должны соответствовать тем id, которые мы задает при старте виджета во вьюшке с фотографиями (код ниже).

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

echo Gallery::widget([
    'items' => $images,
    'options' => [
        'id' => 'gallery-widget-department',
    ],
    'templateOptions' => [
        'id' => 'blueimp-gallery-department',
    ],
    'clientOptions' => [
        'container' => '#blueimp-gallery-department',
    ]
]);
Знаю, что костыли, но другого пути пока не нашел. Так виджет будет работать даже при активном Pjax. Возможно кому-то пригодится, кто столкнется с подобной проблемой. Если найду более изящное решение, то отпишусь об этом.
Ответить