DatatablePayload is used to generate json data for datatable.js component.
DatatablePayload supports multiple filtering and easy to use.
-
Create concrete class which extends oat\tao\model\datatable\AbstractDatatablePayload:
-
Two abstract methods should be implemented:
1. AbstractDatatablePayload::getPropertiesMap() - list of properties and their aliases (practically this is the list of columns represented in datatable).
Example:
protected function getPropertiesMap()
{
return [
'firstname' => 'http://www.tao.lu/Ontologies/generis.rdf#userFirstName',
'lastname' => 'http://www.tao.lu/Ontologies/generis.rdf#userLastName',
'identifier' => 'http://www.tao.lu/Ontologies/mpart.rdf#studentid',
];
}
2. AbstractDatatablePayload::getType() - Class uri to search.
Example:
protected function getType()
{
return 'http://www.tao.lu/Ontologies/mpart.rdf#Student';
}
To get datatable payload just call DatatablePayload::getPayload() method. All necessary data (such as filter data, page number, number of rows, ordering etc.) will be automatically fetched from request and datatable json will be generated. Usage example in controller:
class StudentController
{
...
public function data()
{
$data = new StudentDatatable();
$this->returnJson($data->getPayload(), 200);
}
...
}
AbstractDatatablePayload class implements JsonSerializable interface so it can be used even easier:
class StudentController
{
...
public function data()
{
$this->returnJson(new StudentDatatable(), 200);
}
...
}
Make sure that you configured multiple filter strategy (filterStrategy: ’multiple’) in datatable on client side:
$studentsList.datatable({
url: helpers._url('data', 'Student', 'taoMpArt'),
filter: true,
filterStrategy: 'multiple',
model: [{
id: 'identifier',
label: __('ID Number'),
sortable: true,
filterable: true
}, {
id: 'firstname',
label: __('First Name'),
sortable: true,
filterable: true
}, {
id: 'lastname',
label: __('Last Name'),
sortable: true,
filterable: true
}]
});