PHPackages                             ages/grid - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. ages/grid

ActiveLibrary[Database &amp; ORM](/categories/database)

ages/grid
=========

Reusable Nette UI Grid component with Nextras ORM

v1.0.1(10mo ago)066MITPHPPHP &gt;=8.2

Since Aug 17Pushed 1mo agoCompare

[ Source](https://github.com/A-g-e-s/ages-grid)[ Packagist](https://packagist.org/packages/ages/grid)[ RSS](/packages/ages-grid/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (10)Versions (3)Used By (0)

Ages Grid
=========

[](#ages-grid)

Znovupoužitelná tabulková komponenta pro [Nette](https://nette.org/) s [Nextras ORM](https://nextras.org/orm/). Podporuje řazení, filtrování, stránkování, akce na řádcích a export do Excelu.

**Požadavky:** PHP 8.4, Nette Application 3.1+, Nextras ORM 5.0+

---

Instalace
---------

[](#instalace)

```
composer require ages/grid
```

---

Základní použití
----------------

[](#základní-použití)

Komponentu registrujte v Presenteru nebo Facade přes factory metodu:

```
use Ages\Grid\Grid;
use Nextras\Orm\Collection\ICollection;

protected function createComponentGrid(): Grid
{
    $grid = new Grid($this->repository->findAll());

    $grid->addColumnString('name', 'Jméno')->sortAndFilter();
    $grid->addColumnDate('createdAt', 'Vytvořeno');
    $grid->addColumnNumber('price', 'Cena', unit: 'Kč');

    $grid->addAction(ActionType::Edit, 'edit', 'Upravit');
    $grid->addAction(ActionType::Delete, 'delete!', 'Smazat');

    return $grid;
}
```

V šabloně:

```
{control grid}
```

---

Konstruktor
-----------

[](#konstruktor)

```
new Grid(
    ICollection|OneHasMany $rawData,
    ?GridStyleInterface    $gridStyle = null
)
```

ParametrPopis`$rawData`Kolekce Nextras ORM nebo relace `OneHasMany``$gridStyle`Vlastní styly (viz [Stylování](#stylov%C3%A1n%C3%AD)), výchozí je `GridStyle`---

Sloupce
-------

[](#sloupce)

Každý `addColumn*()` vrací instanci sloupce, na níž lze řetězit fluent metody.

### Společné metody všech sloupců

[](#společné-metody-všech-sloupců)

```
->sortAndFilter()          // zapne řazení i filtrování najednou
->setSortable()            // zapne řazení
->setFilterable()          // zapne filtrování
->setWidth(WidthClasses)   // šířka buňky (Default | Fit | Boolean)
->addClass(string|array)   // přidá CSS třídu buňce
->setLink(string $link, bool $ajax, bool $history, bool $checkEmpty)
                           // hodnota v buňce bude odkaz
->addLinkParam(string $key, string $value, bool $data)
                           // parametr odkazu (data=true → z entity)
->setManyToMany(key, value, name)  // navigace přes ManyHasMany relaci
->setPrefix(string)        // prefix před hodnotou (např. '#')
```

### `addColumnString`

[](#addcolumnstring)

```
$grid->addColumnString(
    string    $name,                    // název property entity (lze vnořit přes '->': 'author->name')
    ?string   $label = null,           // popis sloupce, výchozí = $name
    TextAlign $align = TextAlign::Left,
    ?string   $unit  = null,           // statická jednotka za hodnotou
    bool      $unitFromData = false    // jednotka z jiné property (pak $unit = název property)
): ColumnString
```

### `addColumnNumber`

[](#addcolumnnumber)

```
$grid->addColumnNumber(
    string    $name,
    ?string   $label = null,
    TextAlign $align = TextAlign::Right,
    ?string   $unit  = null,
    bool      $unitFromData = false
): ColumnNumber
```

Navíc:

```
->setFormat(int $decimal, string $decimalSep, string $thousandsSep)
->addSummary(SummaryType $type)   // souhrnný řádek: Sum | Avg | Min | Max
```

### `addColumnDate`

[](#addcolumndate)

```
$grid->addColumnDate(
    string    $name,
    ?string   $label    = null,
    DateType  $dateType = DateType::Date,
    TextAlign $align    = TextAlign::Left,
): ColumnDate
```

`DateType` hodnoty:

HodnotaFormát`Date``d. m. y``DateTime``d. m. y H:i``DateShort``d.m``DateTimeShort``d.m. H:i``Time``H:i``YearMonth``Y-m`Filtr datumového sloupce automaticky zobrazí rozsah Od–Do. Lze také aktivovat bez filtrování:

```
->setDateRangeFilter()
```

### `addColumnBoolean`

[](#addcolumnboolean)

```
$grid->addColumnBoolean(
    string      $name,
    ?string     $label = null,
    BooleanType $type  = BooleanType::Default,
    TextAlign   $align = TextAlign::Left,
): ColumnBoolean
```

`BooleanType` hodnoty: `Default` · `Visibility` · `Trash` · `Error`

### `addColumnEnum`

[](#addcolumnenum)

```
$grid->addColumnEnum(
    string    $name,
    string    $label,
    string    $enumClass,    // FQCN BackedEnum
    TextAlign $align = TextAlign::Left,
): ColumnEnum
```

Filtr zobrazí select s hodnotami enumu.

### `addColumnFunction`

[](#addcolumnfunction)

Volá metodu repozitáře místo přímé property entity.

```
$col = $grid->addColumnFunction('getTotalPrice', 'Celkem');
$col->addFunctionParam('id', fromData: true);   // předá entity->id jako argument
$col->addFunctionParam(0);                       // předá konstantu 0
```

Metoda repozitáře musí mít odpovídající signaturu.

### `addColumnImage`

[](#addcolumnimage)

```
$grid->addColumnImage(
    string    $name,
    ?string   $label      = null,
    ImageType $type       = ImageType::Small,  // Small | Medium | Large
    bool      $isRelative = true,              // cesta relativní k www/
): ColumnImage
```

### `addColumnFile`

[](#addcolumnfile)

```
$grid->addColumnFile(
    string  $name,
    ?string $label          = null,
): ColumnFile
```

### `addColumnCheckEmpty`

[](#addcolumncheckempty)

Zobrazí ikonu přítomnosti/nepřítomnosti hodnoty místo samotné hodnoty.

```
$grid->addColumnCheckEmpty(string $name, ?string $label, TextAlign $align): ColumnCheckEmpty
```

---

Akce na řádcích
---------------

[](#akce-na-řádcích)

### Odkaz (`addAction`)

[](#odkaz-addaction)

```
$grid->addAction(
    ActionType $type,
    string     $link,           // Nette link, např. 'edit' nebo 'delete!'
    ?string    $title  = null,
    bool       $history = false,
    bool       $ajax    = true,
): Action
```

```
$action->addLinkParam('id', 'id', data: true);  // přidá parametr z entity
```

### Callback (`addActionCallback`)

[](#callback-addactioncallback)

Akce zavolá PHP callback místo přesměrování.

```
$action = $grid->addActionCallback(ActionType::Delete, primaryKey: 'id');
$action->onCall[] = function (int $id): void {
    $this->repository->delete($id);
};
```

### Záhlaví (`addHeaderAction`)

[](#záhlaví-addheaderaction)

```
$grid->addHeaderAction(
    ActionType $type,
    string     $link,
    ?string    $title   = null,
    bool       $ajax    = true,
    bool       $history = true,
): HeaderAction
```

### `ActionType` hodnoty

[](#actiontype-hodnoty)

`Edit` · `Delete` · `Show` · `New` · `Duplicate` · `Archive` · `Cancel` · `Complete` · `Link` · `Export` · `Money` · `Graph` · `Print` · `Info` · `Update` · `Email` · `Close` · `Cart` · `Bulb` · `Copy` · `Truck`

---

Filtrování
----------

[](#filtrování)

Filtr se aktivuje na konkrétním sloupci:

```
$grid->addColumnString('name')->setFilterable();
// nebo zároveň řazení:
$grid->addColumnString('name')->sortAndFilter();
```

Řádek filtru se zobrazí automaticky, pokud je alespoň jeden sloupec filtrovatelný.

### Operátory ve filtru (textová pole)

[](#operátory-ve-filtru-textová-pole)

PrefixOperátorbez prefixuLIKE contains`>`větší než`setSortColumn('createdAt');
$grid->reverseSort();   // výchozí směr DESC NULLS FIRST
```

Kliknutím na záhlaví sloupce uživatel přepíná ASC/DESC.

---

Stránkování
-----------

[](#stránkování)

```
// Zapnutí s výchozími možnostmi (80, 160, 240) a výchozím offsetem #1
$grid->setPagination();

// Vlastní možnosti
$grid->setItemsPerPageOptions([25, 50, 100], itemsPerPageOffset: 1);
```

---

Export do Excelu
----------------

[](#export-do-excelu)

```
$grid->addExport();                      // tlačítko s výchozím názvem 'Export'
$grid->addExport('Přehled zakázek');     // vlastní název souboru

// Vlastní výstupní adresář (volitelné, výchozí: www/export/)
$grid->setExportPaths(
    basePath:   '/var/www/app/',
    exportPath: '/var/www/app/www/export/'
);

// Callback po exportu (dostane název souboru)
$grid->onExport[] = function (string $filename): void {
    // logování, notifikace…
};
```

Export vždy zahrnuje aktuálně filtrovaná a seřazená data (bez stránkování).

---

Popis / caption
---------------

[](#popis--caption)

```
$grid->setCaption('Seznam zákazníků');
```

---

Hover efekt řádků
-----------------

[](#hover-efekt-řádků)

```
$grid->hoverable = true;
```

---

Stylování
---------

[](#stylování)

Všechny CSS třídy jsou odděleny do `GridStyleInterface`. Výchozí implementace `GridStyle` používá Tailwind CSS.

Pro vlastní styly implementujte rozhraní a předejte instanci do konstruktoru:

```
class MyGridStyle implements GridStyleInterface
{
    public function mainContainer(): string { return 'my-grid-wrapper'; }
    // … ostatní metody
}

$grid = new Grid($data, new MyGridStyle());
```

---

Vnořené property a relace
-------------------------

[](#vnořené-property-a-relace)

Sloupce podporují tečkovou notaci (oddělovač `->`) pro přístup k vnořeným entitám:

```
$grid->addColumnString('customer->company->name', 'Firma');
```

Pro `ManyHasMany` relace:

```
$grid->addColumnString('tags->name')
     ->setManyToMany(key: 'type', value: 'primary', name: 'label');
```

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance76

Regular maintenance activity

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

319d ago

PHP version history (2 changes)v1.0.0PHP &gt;=8.1

v1.0.1PHP &gt;=8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/20422823?v=4)[Jiří Hovad](/maintainers/A-g-e-s)[@A-g-e-s](https://github.com/A-g-e-s)

---

Top Contributors

[![A-g-e-s](https://avatars.githubusercontent.com/u/20422823?v=4)](https://github.com/A-g-e-s "A-g-e-s (41 commits)")

### Embed Badge

![Health badge](/badges/ages-grid/health.svg)

```
[![Health](https://phpackages.com/badges/ages-grid/health.svg)](https://phpackages.com/packages/ages-grid)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[kimai/kimai

Kimai - Time Tracking

4.8k9.0k1](/packages/kimai-kimai)[ublaboo/datagrid

DataGrid for Nette Framework: filtering, sorting, pagination, tree view, table view, translator, etc

3042.0M25](/packages/ublaboo-datagrid)[nette/code-checker

✅ Nette CodeChecker: A simple tool to check source code against a set of Nette coding standards.

911.7M6](/packages/nette-code-checker)[nette/web-project

Nette: Standard Web Project

10993.3k](/packages/nette-web-project)[tomaj/nette-api

Nette api

36273.2k8](/packages/tomaj-nette-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
