Čá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).