Pagination Phalcon

Proses pagination terjadi ketika kita perlu untuk menyajikan kelompok-kelompok besar data yang sering berganti secara bertahap. Phalcon \ Paginator menawarkan cara yang cepat dan nyaman untuk membagi set ini data halaman dapat dijelajahi.

Adapter Data 

Komponen ini memanfaatkan adapter untuk merangkum berbagai sumber data:

Adaptor Deskripsi
NativeArray Gunakan array PHP sebagai data sumber
Model Gunakan objek Phalcon \ MVC \ Model \ ResultSet sebagai sumber data. Karena PDO tidak mendukung kursor dgn scrol adaptor ini tidak boleh dipakai untuk memecah sejumlah besar catatan
QueryBuilder Gunakan objek Phalcon \ MVC \ Model \ Query \ Builder sebagai data sumber

Contoh Pagination Phalcon 

Dalam contoh di bawah, paginator akan digunakan sebagai sumber data yang hasil dari query pada model, dan membatasi data yang ditampilkan sampai 10 record per halaman:

<?php

// Current page to show
// In a controller this can be:
// $this->request->getQuery('page', 'int'); // GET
// $this->request->getPost('page', 'int'); // POST
$currentPage = (int) $_GET["page"];

// The data set to paginate
$robots = Robots::find();

// Create a Model paginator, show 10 rows by page starting from $currentPage
$paginator = new \Phalcon\Paginator\Adapter\Model(
    array(
        "data" => $robots,
        "limit"=> 10,
        "page" => $currentPage
    )
);

// Get the paginated results
$page = $paginator->getPaginate();

Variabel $currentPage mengatur halaman yang akan ditampilkan. Sedang $paginator->getPaginate() mengembalikan sebuah objek $page yang berisi data paginasi. Hal ini dapat digunakan untuk menghasilkan pagination:

<table>
    <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Type</th>
    </tr>
    <?php foreach ($page->items as $item) { ?>
    <tr>
        <td><?php echo $item->id; ?></td>
        <td><?php echo $item->name; ?></td>
        <td><?php echo $item->type; ?></td>
    </tr>
    <?php } ?>
</table>

objek $page  juga berisi data navigasi:

<a href="/robots/search">First</a>
<a href="/robots/search?page=<?= $page->before; ?>">Previous</a>
<a href="/robots/search?page=<?= $page->next; ?>">Next</a>
<a href="/robots/search?page=<?= $page->last; ?>">Last</a>

<?php echo "You are in page ", $page->current, " of ", $page->total_pages; ?>

 

Penggunaan Adapter  

Contoh dari sumber data yang harus digunakan untuk setiap adaptor:

<?php

//Passing a resultset as data
$paginator = new \Phalcon\Paginator\Adapter\Model(
    array(
        "data"  => Products::find(),
        "limit" => 10,
        "page"  => $currentPage
    )
);

//Passing an array as data
$paginator = new \Phalcon\Paginator\Adapter\NativeArray(
    array(
        "data"  => array(
            array('id' => 1, 'name' => 'Artichoke'),
            array('id' => 2, 'name' => 'Carrots'),
            array('id' => 3, 'name' => 'Beet'),
            array('id' => 4, 'name' => 'Lettuce'),
            array('id' => 5, 'name' => '')
        ),
        "limit" => 2,
        "page"  => $currentPage
    )
);

//Passing a querybuilder as data

$builder = $this->modelsManager->createBuilder()
    ->columns('id, name')
    ->from('Robots')
    ->orderBy('name');

$paginator = new Phalcon\Paginator\Adapter\QueryBuilder(array(
    "builder" => $builder,
    "limit"=> 20,
    "page" => 1
));

Atribut Halaman 

Obyek $page memiliki atribut sebagai berikut:

Atribut Deskripsi
items set catatan yang akan ditampilkan di halaman ini
current Halaman yang sekarang
before Halaman sebelumnya dari yang sekarang
next Halaman berikutnya dari yang sekarang
last Halaman terakhir di set catatan
total_pages Jumlah halaman
total_items Jumlah item dalam sumber data

Menerapkan adapter Anda sendiri 

antarmuka Phalcon \ Paginator \ AdapterInterface  harus diimplementasikan dalam rangka menciptakan adapter paginator anda sendiri atau extend yang sudah ada:

<?php

class MyPaginator implements Phalcon\Paginator\AdapterInterface
{

    /**
     * Adapter constructor
     *
     * @param array $config
     */
    public function __construct($config);

    /**
     * Set the current page number
     *
     * @param int $page
     */
    public function setCurrentPage($page);

    /**
     * Returns a slice of the resultset to show in the pagination
     *
     * @return stdClass
     */
    public function getPaginate();

}

 

Terjemahan dr Pagination Phalcon

http://docs.phalconphp.com/en/latest/reference/pagination.html