Produkty Objednávky Zákazníci Dokumentace
Nepřihlášen Uživatel 1 Uživatel 2 Uživatel 3
Část I · Začínáme

2. První grid

Grid je potomek GridControl se čtyřmi metodami – dvě z nich klidně zůstanou prázdné.

Ukázka

Tři sloupce, žádné tlačítko, žádná úprava řádků. Filtrování, řazení, stránkování, export i skrývání sloupců přesto fungují – dělá je knihovna sama.

Zdrojový kód

php app/Modules/AdminModule/Components/Docs/Start/HelloGridControl/HelloGridControl.php
<?php

declare(strict_types=1);

namespace App\Components\Docs\Start\HelloGridControl;

use Xart\Grid\Button\ButtonManager;
use Xart\Grid\Column\ColumnManager;
use Xart\Grid\Control\GridControl;
use Xart\Grid\DataOutput\Row;
use Xart\Grid\DataSource\DataSource;
use Xart\Grid\DataSource\SQL\SQLDataSource;

/**
 * Dokumentace, kapitola 2 – První grid.
 *
 * Nejmenší grid, který se dá napsat: zdroj dat, tři sloupce a dvě prázdné metody. Přesto umí
 * filtrovat, řadit, stránkovat, exportovat i pamatovat si nastavení – to všechno dělá knihovna sama.
 */
class HelloGridControl extends GridControl
{
    /** Odkud se berou data. Volá se líně, až když si grid o data řekne. */
    public function createDataSource(): DataSource
    {
        return new SQLDataSource(__DIR__ . '/HelloGridControl.sql');
    }


    /** Které sloupce grid má. Aspoň jeden být musí, jinak grid skončí chybou. */
    public function columns(ColumnManager $cm): void
    {
        $cm->add('first_name', 'Jméno');
        $cm->add('last_name', 'Příjmení');
        $cm->add('email', 'E-mail');
    }


    /** Tlačítka v liště nad gridem. Tenhle grid žádná nemá. */
    public function buttons(ButtonManager $bm): void
    {
    }


    /** Úpravy jednotlivých řádků. Tenhle grid nic neupravuje. */
    public function rows(Row $row): void
    {
    }


    /** Vykreslení komponenty – šablona obsahuje jediné {$control}. */
    public function render(): void
    {
        $this->template->render(__DIR__ . '/HelloGridControl.latte');
    }
}
sql app/Modules/AdminModule/Components/Docs/Start/HelloGridControl/HelloGridControl.sql
SELECT
    id,
    first_name,
    last_name,
    email
FROM `customer`
latte app/Modules/AdminModule/Components/Docs/Start/HelloGridControl/HelloGridControl.latte
{$control}

Čtyři metody

createDataSource() Odkud jsou data. Volá se líně, takže do ní stihne promluvit i presenter (kapitola 3.2).
columns(ColumnManager $cm) Sloupce gridu. Aspoň jeden být musí.
buttons(ButtonManager $bm) Tlačítka v liště. Může být prázdná.
rows(Row $row) Volá se pro každý načtený řádek – hodnoty buněk, barvy, řádková tlačítka. Může být prázdná.

Šablona komponenty vypíše celý grid jediným {$control} – GridControl je HtmlStringable.

render() patří Nette komponentě jako každé jiné, nepovinná settings() nese nastavení celého gridu (kapitola 29).