Naja - načíst další

S knihovnou Naja můžete appendování („načíst další“) realizovat pomocí atributu:

data-naja-snippet-append

HomepagePresen­ter.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/defau­lt.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>