Одновременно разбивка по страницам(пагинация) и ajax подгрузка по кнопке "Загрузить еще" в PDO PAGE.
Добрый день! Подскажите пожалуйста возможно ли сделать одновременно пагинацию с разбивкой по страницам и кнопку для ajax загрузки ресурсов при помощи PDO PAGE из коробки?
Комментарии: 9
Прям из коробки нельзя, надо немного поправить JS. Вот это
if (config.history) {
if (typeof(jQuery().sticky) == 'undefined') {
$.getScript(config['assetsUrl'] + 'js/lib/jquery.sticky.min.js', function () {
pdoPage.initialize(config);
});
return;
}
pdoPage.stickyPagination(config);
}
else {
$(config.pagination).hide();
}
Заменить на это$(document).on('click', config['link'], function (e) {
e.preventDefault();
var href = $(this).prop('href');
var key = config['pageVarKey'];
var match = href.match(new RegExp(key + '=(\\d+)'));
var page = !match ? 1 : match[1];
if (pdoPage.keys[key] != page) {
$(config['more']).find('button').attr('disabled', false);
if (config.history) {
if (page == 1) {
pdoPage.Hash.remove(key);
} else {
pdoPage.Hash.add(key, page);
}
}
$this.loadPage(href, config);
}
});
if (config.history) {
if (typeof(jQuery().sticky) == 'undefined') {
$.getScript(config['assetsUrl'] + 'js/lib/jquery.sticky.min.js', function () {
pdoPage.initialize(config);
});
return;
}
pdoPage.stickyPagination(config);
$(window).on('popstate', function (e) {
if (e.originalEvent.state && e.originalEvent.state['pdoPage']) {
$this.loadPage(e.originalEvent.state['pdoPage'], config);
}
});
history.replaceState({pdoPage: window.location.href}, '');
}
И в pdoPage параметру ajaxMode установить значение button.
Я правильно понял, что надо поменять этот код в файле assets/components/pdotools/js/pdopage.js? Поменял, но ничего не произошло, пагинации присваивается класс display:none; не могу понять где. Но даже если присвоить через css display: block !important; то работает не корректно, если пользуешься кнопкой, а потом пагинацией, то перебрасывает по такой ссылке site.ru/?page=1&pageId=17&hash=caba36b7635ec52390b81ac85612a759468b600c на несуществующую страницу.
Выставил параметр ajaxHistory=1, сейчас пагинации не присваивается класс display: none, то есть отображается и кнопка и постраничная разбивка, но попрежнему работает не корректно
<div id="pdopage" class="items-product">
<div class="row rows row-flex">
{'!pdoPage' | snippet : [
'element'=>'msProducts',
'parents'=>$modx->resource->id,
'depth'=>10,
'tpl' =>'product.tpl',
'limit' =>4,
'maxLimit'=>200,
'pageLimit'=>10,
'ajax'=>1,
'ajaxHistory'=>1,
'ajaxMode'=>'button',
'tplPage' =>'@INLINE <a href="{$href}" class="but">{$pageNo}</a>',
'tplPageActive'=>'@INLINE <a href="{$href}" class="but active">{$pageNo}</a>',
'tplPageWrapper'=>'@INLINE <div class="pagination">{$pages}</div>',
'tplPagePrev' =>'@INLINE <li class="control"><a href="{$href}"><</a></li>',
'tplPageNext'=>'@INLINE <li class="control"><a href="{$href}">></a></li>',
'tplPageSkip'=>'@INLINE <span>...</span',
'tplPagePrevEmpty'=>'@INLINE <li class="disabled"><span><<</span></li>',
'tplPageNextEmpty'=>'@INLINE <li class="disabled"><span>>></span></li>',
'sortby'=>'{"menuindex":"DESC"}',
'where'=>'{"template":"6"}'
]}
</div>
<div class="pages">
[[!+page.nav]]
</div>
</div>
Добавил в вызов 'frontend_js'=>'[[+assetsUrl]]js/pdopage.js', все заработало. Единственное если кнопкой подгружаешь до последней страницы, то кнопка пропадает, а при возврате при помощи пагинации не появляется.
Да, там ещё кое-что надо изменить. После
$.post(config['connectorUrl'], params, function (response) {
вставитьif(response.page != response.pages){
$(config['more']).find('button').attr('disabled', false);
}else{
$(config['more']).find('button').attr('disabled', true);
}
И закомментировать или удалитьif (config['mode'] == 'button') {
if (response['pages'] == response['page']) {
$(config['more']).hide();
}
else {
$(config['more']).show();
}
}
Спасибо большое за помощь, все работает.
Повторил всё за вами, но кнопка не появилась, пагинация появилась но при клике перезагружает страницу.
&ajaxMode=`button`
&ajaxHistory=`1`
&frontend_js=`/assets/pdopage.js`
Правда запускается через mFilter2
У mFilter2 свой js для управления пагинацией
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.