lucasff / cakephp-datatable
CakePHP DataTable 插件
dev-master
2014-02-12 02:53 UTC
Requires
- php: >=5.3.0
- composer/installers: *
Suggests
- datatables/datatables: jQuery Plugin for Displaying Tabular Data
Replaces
- lucasff/cakephp-datatable: dev-master
- tigrang/cakephp-datatable: dev-master
This package is auto-updated.
Last update: 2022-01-06 03:03:39 UTC
README
DataTable 是一个用于 JQuery DataTables 的 CakePHP 插件。
要求
- CakePHP 2.2 或更高版本
安装
[手动]
- 下载此文件:http://github.com/tigrang/cakephp-datatable/zipball/master。
- 解压
- 将得到的文件夹复制到
app/Plugin
- 将文件夹重命名为
DataTable
[GIT 子模块]
在您的应用程序目录中运行
git submodule add https://github.com/tigrang/cakephp-datatable.git Plugin/DataTable
git submodule init
git submodule update
[GIT Clone]
在您的插件目录中运行
git clone https://github.com/tigrang/cakephp-datatable.git DataTable
启用插件
在您的 app/Config/bootstrap.php
文件中
CakePlugin::loadAll();
// OR
CakePlugin::load('DataTable');
用法
示例控制器
<?php
class UsersController extends AppController {
/**
* Components
*
* @var array
*/
public $components = array(
'DataTable.DataTable' => array(
'columns' => array(
'id' => false, // bSearchable and bSortable will be false
'username' => 'Name', // bSearchable and bSortable will be true, with a custom label `Name`
// by default, the label with be a Inflector::humanize() version of the key
'email' => array(
'bSearchable' => 'customSearch',// will use model callback to add search conditions
),
'Actions' => null, // tells DataTable that this column is not tied to a field
),
),
);
/**
* Helpers
*
* @var array
*/
public $helpers = array(
'DataTable.DataTable',
);
}
现在您可以在视图中分页多个模型。当显示两个或多个与 view
页面相关联的 hasMany 模型时,这非常有用。在 $this->DataTable->paginate
属性中列出所有要分页的模型
<?php
public function view() {
$this->DataTable->paginate = array('User', 'Article');
}
注意:这些模型必须是直接相关的。
请参阅 docblock 获取组件设置完整列表。
设置好组件后,您需要添加您的视图。
- 首先创建一个
View/[ModelName]/datatable
文件夹 - 在文件夹中创建
action_name.ctp
视图
DataTableResponseView 类(由组件自动设置)有一个名为 dtResponse
的成员,它包含 jQuery DataTables 的返回数据,包括 aaData
。
默认情况下,视图变量 $dtResults
将包含搜索和分页后的模型数据。它可以通过 viewVar
设置进行自定义。
示例视图文件
<?php
foreach($dtResults as $result) {
$this->dtResponse['aaData'][] = array(
$result['User']['id'],
$result['User']['username'],
$result['User']['email'],
'actions',
);
}
示例 bSearchable
回调
<?php
class Users extends AppModel {
public function customSearch($field, $searchTerm, $columnSearchTerm, $conditions) {
if ($searchTerm) {
$conditions[] = array("$field LIKE" => '%' . $searchTerm); // only do left search
}
if ($columnSearchTerm) {
$conditions[] = array($field => $columnSearchTerm); // only do exact match
}
return $conditions;
}
}
Helper 使用
<?php
$this->DataTable->render(); // renders default model for this view
$this->DataTable->render('AssociatedModel'); // renders 'AssociatedModel' table
如果您自己创建 <table>
,请确保在表标签中添加一个 data-model="Model"
属性。辅助器仍然需要用于解析列设置并输出一个全局的javascript dataTableSettings
,您可以使用它。辅助器默认使用以下初始化脚本
$('.dataTable').each(function() {
var table = $(this);
var model = table.attr('data-model');
var settings = dataTableSettings[model];
table.dataTable(settings);
});