Extensions
Extensions
UX DataTables supports common DataTables extensions through PHP helpers. Configure them per-table or set defaults in the bundle configuration.
Buttons Extension
Adds export and interaction buttons (copy, CSV, Excel, PDF, print, column visibility).
Official docs: datatables.net/extensions/buttons
Usage
use Pentiminax\UX\DataTables\Enum\ButtonType;use Pentiminax\UX\DataTables\Model\Extensions\ButtonsExtension;use Pentiminax\UX\DataTables\Model\DataTable;
$buttonsExtension = new ButtonsExtension([ ButtonType::COPY, ButtonType::CSV, ButtonType::EXCEL, ButtonType::PDF, ButtonType::PRINT,]);
$dataTable = new DataTable('products');$dataTable->extensions([$buttonsExtension]);Available Button Types
| Button | Description |
|---|---|
ButtonType::COPY | Copy to clipboard |
ButtonType::CSV | Export as CSV |
ButtonType::EXCEL | Export as Excel |
ButtonType::PDF | Export as PDF |
ButtonType::PRINT | Print view |
ButtonType::COLVIS | Column visibility toggle |
Export Filtering
The Buttons extension automatically excludes columns with the not-exportable class. Mark columns as non-exportable:
$actionsColumn = TextColumn::new('actions', 'Actions') ->setExportable(false); // Won't appear in exportsSelect Extension
Adds row, column, or cell selection capabilities.
Official docs: datatables.net/extensions/select
Usage
use Pentiminax\UX\DataTables\Enum\SelectStyle;use Pentiminax\UX\DataTables\Model\Extensions\SelectExtension;
// Single row selection$selectExtension = new SelectExtension(SelectStyle::SINGLE);
// Multiple row selection$selectExtension = new SelectExtension(SelectStyle::MULTI);
$dataTable->extensions([$selectExtension]);Selection Styles
| Style | Description |
|---|---|
SelectStyle::SINGLE | Select one item at a time |
SelectStyle::MULTI | Select multiple items |
SelectStyle::OS | OS-style selection (Ctrl/Cmd+click) |
SelectStyle::MULTI_SHIFT | Multi with Shift+click for ranges |
Handling Selected Rows
In your custom Stimulus controller:
_onConnect(event) { const table = event.detail.table;
table.on('select', (e, dt, type, indexes) => { if (type === 'row') { const data = table.rows(indexes).data(); console.log('Selected:', data); } });
table.on('deselect', (e, dt, type, indexes) => { console.log('Deselected rows:', indexes); });}Column Control Extension
Adds column-specific controls for ordering and per-column search in header/footer cells.
Usage
$dataTable = new DataTable('products');$dataTable->columnControl();This enables sensible defaults for sorting indicators and column search inputs.
Responsive Extension
Makes tables mobile-friendly by hiding columns and showing them in an expandable child row.
Usage
$dataTable = new DataTable('products');$dataTable->responsive();KeyTable Extension
Enables keyboard navigation within the table (arrow keys, Enter, Tab).
Usage
use Pentiminax\UX\DataTables\Model\Extensions\KeyTableExtension;
$dataTable = new DataTable('products');$dataTable->addExtension(new KeyTableExtension());Scroller Extension
Enables virtual scrolling for handling large datasets efficiently.
Usage
use Pentiminax\UX\DataTables\Model\Extensions\ScrollerExtension;
$dataTable = new DataTable('products');$dataTable->addExtension(new ScrollerExtension());
// Combine with scrollY for best results$dataTable->scrollY('400px');Combining Extensions
Use multiple extensions together:
use Pentiminax\UX\DataTables\Enum\ButtonType;use Pentiminax\UX\DataTables\Enum\SelectStyle;use Pentiminax\UX\DataTables\Model\Extensions\ButtonsExtension;use Pentiminax\UX\DataTables\Model\Extensions\SelectExtension;use Pentiminax\UX\DataTables\Model\Extensions\KeyTableExtension;
$dataTable = new DataTable('products');$dataTable->extensions([ new ButtonsExtension([ButtonType::CSV, ButtonType::EXCEL]), new SelectExtension(SelectStyle::MULTI), new KeyTableExtension(),]);
// Or add one at a time$dataTable->addExtension(new ScrollerExtension());Default Extensions via Configuration
Set bundle-wide defaults:
data_tables: extensions: buttons: [csv, excel, pdf, print] select: style: multiThese can be overridden or supplemented per-table in PHP.