S knihovnou Naja můžete appendování („načíst další“) realizovat pomocí atributu:
data-naja-snippet-append
HomepagePresenter.php
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
use Nette\Utils\Paginator;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
public $data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
public $strana = null;
public $naStranu = 2;
public function handleNacistDalsi(int $strana = 1){
$this->strana = $strana + 1;
$this->payload->postGet = true;
$this->payload->url = $this->link('this',['strana' => $this->strana]);
$this->redrawControl('data');
$this->redrawControl('strana');
}
public function renderDefault(int $strana = 1){
if(!$this->strana){
$this->strana = $strana;
}
$paginator = new Paginator();
$paginator->setItemCount(
count($this->data)
);
$paginator->setPage($this->strana);
$paginator->setItemsPerPage($this->naStranu);
$this->template->data = array_slice($this->data, $paginator->getOffset(), $paginator->getItemsPerPage());
$this->template->paginator = $paginator;
}
}
Homepage/default.latte
{block content}
<h1>Načíst další</h1>
<div n:snippet="data" data-naja-snippet-append>
<div n:foreach="$data as $int">{$int}</div>
</div>
<div n:snippet="strana">
{if !$paginator->isLast()}
<a class="ajax" n:href="nacistDalsi! strana => $paginator->getPage()">Načíst další</a>
{/if}
<div>
{for $i = 1; $i <= $paginator->getPageCount(); $i++}
{if $paginator->getPage() === $i}
{$i}
{else}
<a n:href="this strana => $i">{$i}</a>
{/if}
{/for}
</div>
</div>
<script src="https://unpkg.com/naja@2/dist/Naja.min.js"></script>
<script>
naja.initialize();
</script>