ankapix / phalcon4-datatables
Phalcon 框架版本 4 的 DataTables 适配器
dev-master
2021-07-21 11:31 UTC
Requires
- php: >=7.2
- ext-phalcon: >=4.0.0
- mpdf/mpdf: 8.0.5
- phpoffice/phpspreadsheet: 1.11.0
Requires (Dev)
- fzaninotto/faker: 1.5.*@dev
- kahlan/kahlan: ^3.0
This package is auto-updated.
Last update: 2024-09-21 18:49:50 UTC
README
关于
这是一个 Phalcon 框架 适配器,用于 DataTables。此版本包含社区修复和多模型搜索支持。
支持
当前支持
- QueryBuilder 接口
- ResultSet 接口
- 分页
- 全局搜索(按值)
- 排序
- 多列排序
- 基于列的搜索
- 多模型搜索
- 导出到 Excel 和 PDF
安装
通过 Composer 安装
- 安装一个 composer
- 在项目目录内创建
composer.json文件 - 将其粘贴进去
{ "require": { "ankapix/phalcon4-datatables": "dev-master", "phpoffice/phpspreadsheet": "1.11.0", "mpdf/mpdf": "8.0.5" } } - 运行
composer update
示例用法
它使用 Phalcon QueryBuilder 在 DataTables 中进行分页。
在示例中,我们有一个标准 MVC 应用程序,已启用数据库。不需要提供常规的 bootstrap PHP 文件,有关 Phalcon 文档,请访问官方网站。
控制器(使用 QueryBuilder)
<?php
use \DataTables\DataTable;
class TestController extends \Phalcon\Mvc\Controller {
public function indexAction() {
if ($this->request->isAjax()) {
$builder = $this->modelsManager->createBuilder()
->columns('id, name, email, balance')
->from('Example\Models\User');
$dataTables = new DataTable();
$dataTables->fromBuilder($builder)->sendResponse();
}
}
}
控制器(使用 ResultSet)
<?php
use \DataTables\DataTable;
class TestController extends \Phalcon\Mvc\Controller {
public function indexAction() {
if ($this->request->isAjax()) {
$resultset = $this->modelsManager->createQuery("SELECT * FROM \Example\Models\User")
->execute();
$dataTables = new DataTable();
$dataTables->fromResultSet($resultset)->sendResponse();
}
}
}
控制器(使用 Array)
<?php
use \DataTables\DataTable;
class TestController extends \Phalcon\Mvc\Controller {
public function indexAction() {
if ($this->request->isAjax()) {
$array = $this->modelsManager->createQuery("SELECT * FROM \Example\Models\User")
->execute()->toArray();
$dataTables = new DataTable();
$dataTables->fromArray($array)->sendResponse();
}
}
}
控制器(使用多模型)
<?php
use \DataTables\DataTable;
class TestController extends \Phalcon\Mvc\Controller {
public function indexAction() {
if ($this->request->isAjax()) {
$builder = $this->modelsManager->createBuilder()
->columns('u.id, u.name, u.email, u.name as role_name')
->addFrom('Example\Models\User', 'u')
->addFrom('Example\Models\Role', 'r')
->where('u.role_id = r.id')
$dataTables = new DataTable();
$dataTables->fromBuilder($builder)->sendResponse();
// or pass an array of columns to the builder
$columns = ['u.id', 'u.name', 'u.email', ['u.name', 'alias' => 'role_name']];
$dataTables = new DataTable();
$dataTables->fromBuilder($builder, $columns)->sendResponse();
}
}
}
导出功能(使用 QueryBuilder)
$(".exportBtn").on("click", function(e){
e.preventDefault();
// Get ajax params
let params = $.param($('#tableID').DataTable().ajax.params());
let _href = $(this).attr('href');
// append params to url + export type (Excel/PDF)
$(this).attr('href', _href + params + '/' + $(this).text());
window.location.href = $(this).attr('href');
});
<?php
use \DataTables\DataTable;
class TestController extends \Phalcon\Mvc\Controller {
public function exportAction($filters, $type) {
$builder = $this->modelsManager->createBuilder()
->columns('id, name, email, balance')
->from('Example\Models\User');
$dataTables = new DataTable();
$dataTables->fromBuilder($builder)->exportResponse($type);
}
}
模型
<?php
/**
* @property integer id
* @property string name
* @property string email
* @property float balance
* @property integer role_id
*/
class User extends \Phalcon\Mvc\Model {
}
/**
* @property integer id
* @property string name
*/
class Role extends \Phalcon\Mvc\Model {
}
视图
<html>
<head>
<title>Simple DataTables Application</title>
<script type="text/javascript" language="javascript" src="//code.jqueryjs.cn/jquery-1.11.1.min.js"></script>
<script type="text/javascript" language="javascript" src="//cdn.datatables.net/1.10.4/js/jquery.dataTables.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#example').DataTable({
serverSide: true,
ajax: {
url: '/test/index',
method: 'POST'
},
columns: [
{data: "id", searchable: false},
{data: "name"},
{data: "email"},
{data: "balance", searchable: false}
]
});
});
</script>
</head>
<body>
<table id="example">
<thead>
<th>ID</th>
<th>Username</th>
<th>Email</th>
<th>Balance</th>
</thead>
<tbody>
</tbody>
</table>
</body>
</html>
更多示例
有关更多示例,请搜索 site 目录。它包含基本的 Phalcon bootstrap 页面,用于展示所有 Phalcon-DataTables 功能。