Ajax Paginator – paginator nezmení stranu
- Aris
- Člen | 48
Ahoj, mám problém so stránkovaním cez Nette Paginator pri použití Ajax-u. Stránkovanie je nastavené na tlačidlo „Zobraziť viac“. Pri prvej požiadavke sa výraz $paginator->page+1 v javscripte vykoná, v presenteri je $paginator->page rovný 2. Počas ďalších AJAX requestov sa v paginatore stránka nezmení a ostane visieť na 2. strane.
Vyzerá to tak že bude problém v tom, že paginator pri AJAX-e nezmení
stránku, respektíve ju neprepíše v šablóne. Nejaký tip ako na to?
Ďakujem za rady. :)
<div class="row white-box ajax" n:snippet="ajaxSearchResults" data-ajax-append="true">
<div class="content-page" data-id="{$paginator->page*$paginator->getItemsPerPage()}" data-page="{$paginator->page}">
{foreach $articles as $article}
......
</div>
</div>
<div class="pagination col-md-12" n:snippet="ajaxPagination" >
<div class="text-center">
<button class="ajax get-more-btn btn btn-info" id="">Zobraziť viac</button>
</div>
.......
</div>
<script n:syntax="double">
//get more content ajax
$(document).on('click', '.get-more-btn', function(e){
if ($(window).data('ajaxready') == false) return;
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
$(window).data('ajaxready', false);
$.nette.ajax({
cache: false,
beforeSend: function () {
$('.preloader').show();
},
complete: function () {
$('.preloader').hide();
},
off: ['loading'],
url: {{link default, $paginator->page+1}},
data: {'count_offset_default': $(".content-page").last().data('id')},
success: function () {
$(window).data('ajaxready', true);
}
});
}
});
</script>
public function __construct()
{
$this->paginator = new Paginator;
}
public function renderDefault($page=1)
{
bdump($page);
$articlesCount = $this->articlesModel->countArticles();
$this->paginator = new Paginator;
$this->paginator->setItemCount($articlesCount); // celkový počet článků
$this->paginator->setItemsPerPage(5); // počet položek na stránce
$this->paginator->setPage($page); // číslo aktuální stránky
$selected_articles = $this->articlesModel->selectArticles($this->paginator->getLength(), $this->paginator->getOffset());
$this->template->articles = $selected_articles;
$this->template->paginator = $this->paginator;
$this->template->renderAjax = $this->render_ajax;
bdump($_GET);
if($this->isAjax() && ($_GET['count_offset_default'] < $this->paginator->getItemCount()))
{
bdump('ajax prebehol');
$this->redrawControl('ajaxSearchResults');
$this->redrawControl('ajaxPagination');
}
}
Editoval Aris (10. 1. 2019 9:29)
- Martk
- Člen | 661
To je tím, že link zůstane stejný. Nadefinuješ ho natvrdo a pak se nepřepíše.
<button class="ajax get-more-btn btn btn-info" data-page="{$paginator->page + 1}">Zobraziť viac</button>
$(document).on('click', '.get-more-btn', function(e){
if ($(window).data('ajaxready') == false) return;
if ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
$(window).data('ajaxready', false);
$.nette.ajax({
cache: false,
beforeSend: function () {
$('.preloader').show();
},
complete: function () {
$('.preloader').hide();
},
off: ['loading'],
url: {{link default}},
data: {
'count_offset_default': $(".content-page").last().data('id'),
page: $(this).data('page')
},
success: function () {
$(window).data('ajaxready', true);
}
});
}
});