Přeskočit na hlavní obsah

Columns

Columns neboli sloupce jsou jednoduché PHP třídy, které ovlivňují to, v jakém formátu vám budou navrácena data z API a také, jak budou renderovány v datagridu.

Příklad použítí sloupců

Přidání sloupce EmailColumn vám umožní pracovat s propety email skrze API endpoint a zároveň vám umožní rendering tohoto sloupce v tabulce datagridu. Tento sloupec má (by default) přiřazen EmailColumnRenderer.vue, jenž zajištuje, že hodnota bude v tabulce vykreslena jako hypertextový odkaz. K dispozici je celá řada sloupců a column rendererů.

public function read(ReadBuilder $builder, CollectionRequest $request): ReadBuilder
{
return $builder
->add(new EmailColumn(
key: 'email',
name: 'E-mail',
formatters: [
// Demonstrace formáteru - vysvětleno v následujícím odstavci
//new CallableFormatter(fn($value) => "mailto:{$value}"),
]
))
//->add(...)
//->add(...)
;
}

Formátery

Při čtení dat ze sloupce se hodnota vždy zformátuje pomocí tzv. formáterů. V příkladu je demonstrativně zakomentován CallableFormatter, který lze použít pro rychlou transformaci dat. K dispozici je ale celá řada formatters.

Přehled sloupců

Column (název třídy)FormattersRenderersRenderer outputFallback na String
1ArrayColumnArray<v-chip-group>ne
2BlobColumnStringstringano
3BooleanColumnBoolean<v-icon>ne
4DateColumnDateStringFormát Y-m-dano
5DateCzColumnDateCzStringFormát j.n.Yano
6DateTimeColumnDateTimeStringFormát Y-m-d H:i:sano
7DateTimeCzColumnDateTimeCzStringFormát j.n.Y H:i:sano
8DateTimeIntervalColumnDateTimeIntervalDateTimeIntervalFormát %y %m %d %h %m %sne
9DateTimeZoneColumnDateTimeZoneDateTimeZoneFormát ISO 8601ne
10DateTimeZoneCzColumnDateTimeZoneCzDateTimeZoneFormát ISO 8601ne
11EmailColumnEmailEmail<a href="mailto:...">ne
12HourMinuteColumnHourMinuteStringFormát H:iano
13HourMinuteCzColumnHourMinuteCzStringFormát G:iano
14JsonColumnJsonJSON stringne
15NumericColumnStringstringano
16PhoneColumnPhonePhone<a href="tel:...">ne
17RichTextColumnRichTextStringstringano
18StringColumnStringstringano
19TimeColumnTimeStringFormát H:i:sano
20TimeCzColumnTimeCzStringFormát G:i:sano
21ToManyColumnToManyJoinMany<v-chip-group>ne
22ToOneColumnToOneJoinOne<v-chip>ne
23UrlColumnUrl<a href="...">ne
24VideoLinkColumnVideoLinkUrl<a href="...">ne

Společné parametry sloupců

U všech sloupců lze nastavit tyto společné parametry:

ParametrTypVýchozí hodnotaPopis
keystringKlíč sloupce v API a ve formuláři.
namestringNázev sloupce v záhlaví datagridu.
sortableboolfalseUrčuje, zda je sloupec řaditelný v datagridu.
visiblebooltrueUrčuje, zda je sloupec vizuálně skrytý v datagridu.
formattersIFormatters[]dle sloupcePole formatterů, které se použijí pro formátování dat.

Přehled column rendererů

Vue column rendererSouborVue renderujePoznámka
1ArrayArrayColumnRenderer.vuePole jako <chip-group>
2BooleanBooleanColumnRenderer.vueBoolean jako <v-icon>
3DateTimeIntervalDateTimeIntervalColumnRenderer.vueInterval jako %y %m %d %h %m %s+tooltip
4DateTimeZoneDateTimeZoneColumnRenderer.vueDatum a čas s timezone jako ISO 8601+tooltip
5EmailEmailColumnRenderer.vueE-mail jako <a href="mailto:...">_blank
6JoinManyJoinManyColumnRenderer.vuePoložky jako <chip-group>
7JoinOneJoinOneColumnRenderer.vuePoložku jako <v-chip>
8JsonJsonColumnRenderer.vueJSON jako JSON string
8PhonePhoneColumnRenderer.vueTelefon jako <a href="tel:...">_blank
9StringStringColumnRenderer.vuestring
10UrlUrlColumnRenderer.vueURL jako <a href="...">_blank

Vlastní sloupec

Pokud potřebujete ovlivnit vykreslení dat konkrétního sloupce v datagridu či konkrétní property v API jiným způsobem, než umožňují dostupné columns (či jejich formátery a renderery), můžete si vytvořit vlastní sloupec.

Vytvoření sloupce

Stačí přidat novou třídu, která podědí BaseColumn a implementuje metodu renderer().

app/Collection/Column/MyCustomColumn.php
class MyCustomColumn extends BaseColumn
{
/**
* Definuje název Vue column-rendereru.
* Pokud Vue komponenta není zaregistrována,
* provede se fallback na StringColumnRenderer.vue.
*/
public function renderer(): string
{
return 'my-custom-column-renderer';
}

/**
* Pomocí konstruktoru lze přidat jakékoli vlastní parametry.
*
* @param IFormatter[] $formatters
*/
public function __construct(
protected string $key,
protected string $name,
protected string $myParam
protected bool $sortable = false,
protected bool $visible = true,
protected array $formatters = [],
)
{
// Ukázka přidání vlastního formatteru.
$formatters[] = new MyCustomFormatter();
parent::__construct(
key: $key,
name: $name,
sortable: $sortable,
visible: $visible,
formatters: $formatters
);
}

/**
* Také je možné přidat metodu toArray(), díky které
* můžete ovlivnit výsledné schéma pro datagrid.
*
* @return array{
* renderer: string,
* key: string,
* name: string,
* sortable: bool,
* visible: bool,
* formatters: class-string[],
* params: array{myParam: string}
* }
*/
public function toArray(): array
{
$schema = parent::toArray();
$schema['params']['myParam'] = $this->myParam;
return $schema;
}
}

Povinné parametry konstruktoru

Konstruktor musí obsahovat veškeré parametry, které obsahuje i konstruktor rodičovské třídy BaseColumn.

public function __construct(

// Klíč sloupce v API
protected string $key,

// Název sloupce v záhlaví datagridu
protected string $name,

// Navíc - Váš rozšiřující parametr
protected string $myParam,

// Navíc - Další rozšiřující parametr
protected string $myParamX,

// Určuje, zda je sloupec řaditelný v datagridu
protected bool $sortable = false,

// Určuje, zda je sloupec vizuálně skrytý v datagridu
protected bool $visible = true,

// Pole formatterů, které se použijí pro formátování dat
protected array $formatters = [],
)
{
// ...
}

Vlastní column renderer

Pokud potřebujete vytvořit vlastní Vue komponentu pro vykreslení sloupce v datagridu, lze to provést ideálně ve složce assets/datagrid/columns. Vytvoříme zde tedy nový soubor MyCustomColumnRenderer.vue a dále budeme postupovat podle následující kapitoly: megio panel - column