DataTables
In de stek worden op allerlei plekken datatables gebruikt, datatables is een jQuery plugin en is heel erg krachtig.
Er is een php wrapper voor datatables gebouwd om deze met php te kunnen op bouwen met behulp van het framework.
Zie initDataTable in datatable/api.ts voor de initializatie code van DataTables. Deze ontvangt een settings object vanuit de php, dit settingsobject wordt gemaakt in de DataTable klasse. De datatables api is heel erg declaratief waardoor dit op een elegante manier kan gebeuren.
Werking
In een notendop werken datatabellen op de volgende manier:
- De
DataTable(oud) ófDataTableBuilder(nieuw) genereerd een JSON waarde met configuratie voor datatabellen, zie datatables.net voor alle mogelijke opties. - Er wordt een html tag gemaakt met een specifieke klasse
ctx-datatableen eendata-settingsattribuut die de gegeneerde opties json bevat. initDataTable(assets/js/datatable/api.ts) wordt aangeroepen voor iederectx-datatable, deze functie initialiseert een nieuwe datatabel- Datatabellen zijn op verschillende plekken uitgebreid
- extensie
dataTables.childRow.tsom een regel uit te klappen met nog wat inhoud (nog een datatabel bijvoorbeeld) - extensie
dataTables.columnGroup.tsom te kunnen groeperen op een specifieke kolom - extensie
dataTables.rowButton.tsom knoppen op een datatabel regel te kunnen hebben - custom renders in
render.tszie Renders - custom knoppen in
buttons.tszie Knoppen
- extensie
API
Het bestand api.ts is losgetrokken omdat anders de externe stek op datatables zou leunen terwijl dat niet nodig is. Er zijn een aantal functies in de knoppen code die datatables gebruikt en die worden ook op de externe stek geladen, maar de externe stek heeft geen datatables.
Knoppen
Boven een datatable staat bijna altijd een rij met knoppen, het aanmaken van een knop is heel makkelijk. Ze zijn geïmplementeerd in buttons.ts
// In een DataTable class' __construct
$this->addKnop(
new ConfirmDataTableKnop(
Multiplicity::One(),
'/maaltijden/beheer/verwijder',
'Verwijderen',
'Maaltijd verwijderen',
'verwijderen'
)
);
De volgende opties zijn er om knoppen eigenschappen te geven.
defaultCsrDelft\view\formulier\datatable\knop\DatatableKnop- standaard ingesteld
- kijkt naar de multipliciteit die gegeven is, dit slaat op de selectie,
== 1betekent één geselecteerde item.> 1betekend meer dan een geselecteerde item. - Zorgt ervoor dat de knop zich gedraagt als een
ajax_knop, de default actie van knoppen vóór #206 - Kan een argument van een row meegeven in de url. Bijvoorbeeld
href=/maaltijden/beheer/:maaltijd_idverwijst naar de id in de geselecteerde row. Dit werkt alleen (stabiel) bij multipliciteit== 1, gebruik deze multipliciteit om te garanderen dat er iets gebeurt. Als er meer dan 1 geselecteerd item is wordt er geen poging gedaan de lege plekken in te vullen.

popupCsrDelft\view\formulier\datatable\knop\PopupDataTableKnop- Alles van
default - Opent een nieuw venster met de href die megegeven is aan de knop
urlCsrDelft\view\formulier\datatable\knop\UrlDataTableKnop- Alles van
default - Zelfde als popup, maar dan in hetzelfde venster
sourceChangeCsrDelft\view\formulier\datatable\knop\SourceChangeDataTableKnop- Veranderd de bron van een datatable naar de meegegeven href. Heeft een ingedrukte staat als de button actief is.

confirmCsrDelft\view\formulier\datatable\knop\ConfirmDataTableKnop- Laat een gebruiker op ‘Weet u dit zeker?’ klikken

defaultCollectionCsrDelft\view\formulier\datatable\knop\CollectionDataTableKnop- Dit is
collectionvan datatables, maar dan met de multipliciteit van default in acht genomen. - Gebruik deze in plaats van
collection.

Renders
- default, zorgt ervoor dat de juiste weergave van de data wordt gekozen (sort, export, default)
- bedrag, format een bedrag van 0000 naar €0,00
- check, laat een vinkje of kruisje zien voor een boolean
- aanmeldFilter, custom html voor maaltijden
- aanmeldingen, custom voor maaltijden
- totaalPrijs, custom voor maaltijden
- date, format een datum
- time, format een tijd
- datetime, format een datum en tijd
- timeago, format als tijd sinds nu (met js)
- filesize, format een bestandsgrootte in bytes.