Skip to content

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

ButtonDescription
ButtonType::COPYCopy to clipboard
ButtonType::CSVExport as CSV
ButtonType::EXCELExport as Excel
ButtonType::PDFExport as PDF
ButtonType::PRINTPrint view
ButtonType::COLVISColumn 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 exports

Select 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

StyleDescription
SelectStyle::SINGLESelect one item at a time
SelectStyle::MULTISelect multiple items
SelectStyle::OSOS-style selection (Ctrl/Cmd+click)
SelectStyle::MULTI_SHIFTMulti 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:

config/packages/datatables.yaml
data_tables:
extensions:
buttons: [csv, excel, pdf, print]
select:
style: multi

These can be overridden or supplemented per-table in PHP.