lucasff/cakephp-datatable

CakePHP DataTable 插件

安装: 28

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 30

类型:cakephp-plugin

dev-master 2014-02-12 02:53 UTC

This package is auto-updated.

Last update: 2022-01-06 03:03:39 UTC


README

DataTable 是一个用于 JQuery DataTables 的 CakePHP 插件。

要求

  • CakePHP 2.2 或更高版本

安装

[手动]

  1. 下载此文件:http://github.com/tigrang/cakephp-datatable/zipball/master
  2. 解压
  3. 将得到的文件夹复制到 app/Plugin
  4. 将文件夹重命名为 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);
});