Yii2 Widget for DataTables plug-in for jQuery
The preferred way to install this extension is through composer.
Either run
composer require nullref/yii2-datatables
or add
"nullref/yii2-datatables": "~1.0"
to the require section of your composer.json
file.
<?= \nullref\datatable\DataTable::widget([
'data' => $dataProvider->getModels(),
'columns' => [
'id',
'name',
'email'
],
]) ?>
Also you can use all Datatables options
To pass them as widget options:
<?= \nullref\datatable\DataTable::widget([
'data' => $dataProvider->getModels(),
'scrollY' => '200px',
'scrollCollapse' => true,
'paging' => false,
'columns' => [
'name',
'email'
],
]) ?>
<?= \nullref\datatable\DataTable::widget([
'columns' => [
//other columns
[
'class' => 'nullref\datatable\LinkColumn',
'url' => ['/model/delete'],
'options' => ['data-confirm' => 'Are you sure you want to delete this item?', 'data-method' => 'post'],
'queryParams' => ['id'],
'label' => 'Delete',
],
],
]) ?>
Properties of LinkColumn
:
label
- text placed ina
tag;url
- will be passed toUrl::to()
;options
- HTML options of thea
tag;queryParams
- array of params added tourl
render
- custom render js function. E.g:
//config ...
'columns' => [
'id',
//...
[
'class' => 'nullref\datatable\LinkColumn',
'render' => new JsExpression('function render(data, type, row, meta ){
return "<a href=\"/custom/url/"+row["id"]+"\">View</a>"
}'),
],
],
//...
DataTables
supports several styling solutions, including Bootstrap
, jQuery UI
, Foundation
.
'assetManager' => [
'bundles' => [
'nullref\datatable\DataTableAsset' => [
'styling' => \nullref\datatable\DataTableAsset::STYLING_BOOTSTRAP,
]
],
],
It's posible to use custom styles and scripts:
'nullref\datatable\DataTableAsset' => [
'sourcePath' => '@webroot/js/plugin/datatables/',
'js' => [
'jquery.dataTables-1.10-cust.js',
'DT_bootstrap.js',
],
'css' => [
'data-table.css',
],
'styling' => false,
]
To enable server-side processing add DataTableAction
to controller like this:
class SomeController extends Controller
{
public function actions()
{
return [
'datatables' => [
'class' => 'nullref\datatable\DataTableAction',
'query' => Model::find(),
],
];
}
}
Searching and ordering can be customized using closures
public function actions()
{
return [
'datatables' => [
'class' => 'nullref\datatable\DataTableAction',
'query' => Model::find(),
'applyOrder' => function($query, $columns, $order) {
//custom ordering logic
return $query;
},
'applyFilter' => function($query, $columns, $search) {
//custom search logic
return $query;
},
],
];
}
If you need to get some relation data you can call join
or similar methods from $query
in applyFilter
closure.
And add options to widget:
<?= \nullref\datatable\DataTable::widget([
/** ... */
'serverSide' => true,
'ajax' => '/site/datatables',
]) ?>