PHP code example of italix / datasets

1. Go to this page and download the library: Download italix/datasets library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

italix / datasets example snippets




use Italix\DataSets\DataSet;
use Italix\DataSets\Drivers\Tabulator\TabulatorDriver;

// Create a dataset from any TableMeta source (e.g. from italix/orm)
$ds = new DataSet($usersTable);

// Select and configure columns
$ds->columns(['name', 'email', 'role', 'created_at']);

$ds->column('name')->sortable(true)->searchable(true)->width('200px');
$ds->column('email')->sortable(true)->searchable(true);
$ds->column('role')->sortable(true)->horizontal_align('center');
$ds->column('created_at')->sortable(true)->formatter('datetime');

// Server-side data loading
$ds->ajax_url('/api/users')
    ->per_page(25)
    ->default_sort('created_at', 'desc');

// Render with Tabulator
$driver = new TabulatorDriver();
$script = $driver->render_script($ds, '#users-table', 'usersTable');

$ds->action_column()
    ->width('150px')
    ->frozen(true);

$ds->action_column()->button('edit', 'Edit')
    ->css_class('btn btn-sm btn-primary')
    ->icon('fa fa-pencil');

$ds->action_column()->button('delete', 'Delete')
    ->css_class('btn btn-sm btn-danger')
    ->icon('fa fa-trash')
    ->confirm('Are you sure?');

// Map actions to JS callback functions
$ds->on('edit', 'onEditUser');
$ds->on('delete', 'onDeleteUser');

$ds->selectable(true);

$ds->toolbar()->position('top');

// scope='none' — callback receives no arguments
$ds->toolbar()->button('add', 'New User', 'none')
    ->css_class('btn btn-success')
    ->icon('fa fa-plus');

// scope='selected' — callback receives selected row data
$ds->toolbar()->button('delete_selected', 'Delete Selected', 'selected')
    ->css_class('btn btn-danger')
    ->confirm('Delete selected users?');

// scope='all' — callback receives all row data
$ds->toolbar()->button('export', 'Export', 'all')
    ->css_class('btn btn-outline-secondary');

$ds->on('add', 'onAddUser');
$ds->on('delete_selected', 'onDeleteSelected');
$ds->on('export', 'onExportUsers');

// Checkbox mode — adds a checkbox column, supports select-all
$ds->selectable(true);

// Highlight mode — click rows to select, Ctrl+click for multi-select
$ds->selectable('highlight');

// Global search input above the table
$ds->global_search(true, 'Search users...')
    ->search_debounce(400)
    ->search_min_length(2);

// Mark columns as searchable (sent as search_columns[] in AJAX requests)
$ds->column('name')->searchable(true);
$ds->column('email')->searchable(true);

// Column-level header filters
$ds->column('role')->header_filter('select');
$ds->column('name')->header_filter('input');

// Call default_sort() multiple times to add sort levels
$ds->default_sort('status', 'asc');
$ds->default_sort('created_at', 'desc');

// Users can also Shift+click column headers interactively

$ds->on('row_click', 'onRowClick');
$ds->on('row_dbl_click', 'onRowDblClick');
$ds->on('row_context', 'onRowContext');
$ds->on('row_selected', 'onRowSelected');
$ds->on('row_deselected', 'onRowDeselected');

use Italix\DataSets\DataTree;

$tree = new DataTree($categoriesTable);
$tree->columns(['name', 'sort_order']);
$tree->ajax_url('/api/categories');

$tree->tree_config()
    ->parent_column('parent_id')
    ->id_column('id')
    ->start_open(true)
    ->toggle_column('name');

use Italix\DataSets\ServerSideRequest;
use Italix\DataSets\ServerSideResponse;

$request = ServerSideRequest::from_globals();

// Pagination
$page     = $request->page();       // 1-based
$per_page = $request->per_page();   // default 25
$offset   = $request->offset();     // calculated

// Sorting (single or multi-column)
$sort_col = $request->sort_column();
$sort_dir = $request->sort_direction();
$sorts    = $request->sorts();  // [['column' => '...', 'direction' => '...'], ...]

// Search
$search   = $request->search();
$columns  = $request->search_columns();

// Column filters
$filters  = $request->filters();  // ['role' => 'admin', ...]

// Build and send the response
$response = ServerSideResponse::from_request($rows, $total, $request);
$response->send();  // outputs JSON and exits

$ds->column('price')
    ->label('Unit Price')              // Display label
    ->sortable(true)                   // Enable sorting
    ->searchable(true)                 // Include in global search
    ->visible(false)                   // Hidden (toggle-able by user)
    ->width('120px')                   // Fixed width
    ->min_width('80px')                // Minimum width
    ->formatter('money', ['symbol' => '€'])  // Tabulator formatter
    ->horizontal_align('right')                 // Cell alignment
    ->header_align('right')            // Header alignment
    ->frozen(true)                     // Sticky column
    ->css_class('font-mono')           // CSS class
    ->header_filter('input')           // Column header filter
    ->extra(['editor' => 'input']);     // Driver-specific options

use Italix\DataSets\Drivers\DriverRegistry;
use Italix\DataSets\Drivers\Tabulator\TabulatorDriver;

$registry = new DriverRegistry();
$registry->register(new TabulatorDriver());

$driver = $registry->get('tabulator');
$config = $ds->render($driver);    // array
$json   = $ds->to_json($driver);   // JSON string
$script = $driver->render_script($ds, '#table');  // JS snippet

use function Italix\DataSets\dataset;
use function Italix\DataSets\data_tree;

$ds   = dataset($usersTable)->columns(['name', 'email'])->ajax_url('/api/users');
$tree = data_tree($categoriesTable)->ajax_url('/api/categories');

use function Italix\Orm\Schema\{mysql_table, integer, varchar, timestamp};

$users = mysql_table('users', [
    'id'         => integer()->primary_key()->auto_increment(),
    'name'       => varchar(100)->not_null(),
    'email'      => varchar(255)->not_null(),
    'created_at' => timestamp()->default_value('CURRENT_TIMESTAMP'),
]);

// Pass directly to DataSet — no adapters needed
$ds = new DataSet($users);