Phalcon项目中如何根据数据修改DataTables行背景色
在Phalcon项目中根据数据设置DataTables行背景色
一、修正后端控制器代码
首先修正控制器中查询构建器的别名错误(addFrom使用ar作为别名,但列定义里用了a),然后调整数据返回格式,方便前端识别并设置行样式:
private function dataTablesAjax($request) { $params = $columns = $totalRecords = $data = []; $params = $_REQUEST; $columns = [ 0 => 'payID', 1 => 'userName', 2 => 'refundDays', ]; // 修正别名:addFrom的别名改为a,与列定义保持一致 $builder = $this->modelsManager->createBuilder() ->columns([ 'payID' => 'a.payID', 'userName' => 'a.userName', 'refundDays' => 'a.days', ]) ->addFrom(AccountsRefunds::class, 'a'); $builder->orderBy($columns[$params['order'][0]['column']] . " " . $params['order'][0]['dir']); $builder->limit($params['length'], $params['start']); // 补充计算总记录数,确保DataTables分页统计正确 $totalRecords = $this->modelsManager->createBuilder() ->from(AccountsRefunds::class, 'a') ->getQuery() ->execute() ->count(); $result = $builder->getQuery()->execute(); foreach ($result as $value) { // 返回关联数组,保留字段名,同时可加入后端计算的行样式类 $rowData = [ 'payID' => $value->payID, 'userName' => $value->userName, 'refundDays' => $value->refundDays, // 根据refundDays的值生成样式类,示例:超过30天标黄,负数标红 'rowClass' => $value->refundDays > 30 ? 'bg-warning' : ($value->refundDays < 0 ? 'bg-danger' : '') ]; $data[] = $rowData; } return [ "draw" => intval($params['draw']), "recordsTotal" => intval($totalRecords), "recordsFiltered" => intval($totalRecords), "data" => $data ]; }
二、修改前端视图的DataTables初始化代码
在视图中添加DataTables初始化脚本,通过createdRow回调函数动态设置行背景色:
<div class="card-body"> <table class="table table-hover responsive" id="dataTables" width="100%" cellspacing="0"> <thead> <tr> <th>payID</th> <th>userName</th> <th>refundDays</th> </tr> </thead> </table> </div> <script> $(document).ready(function() { $('#dataTables').DataTable({ processing: true, serverSide: true, ajax: { url: '/你的控制器路径/dataTablesAjax', // 替换为实际的AJAX接口路径 type: 'POST' }, columns: [ { data: 'payID' }, { data: 'userName' }, { data: 'refundDays' } ], // 行创建完成后执行的回调,用于设置样式 createdRow: function(row, data, dataIndex) { // 方式1:使用后端返回的rowClass设置样式 if (data.rowClass) { $(row).addClass(data.rowClass); } // 方式2:前端直接根据refundDays判断(无需后端传rowClass时用) // if (data.refundDays > 30) { // $(row).addClass('bg-warning'); // } else if (data.refundDays < 0) { // $(row).addClass('bg-danger'); // } } }); }); </script>
说明
- 两种样式设置方式二选一即可:后端预计算样式类更适合复杂逻辑,前端判断则更灵活。
- 确保页面已引入jQuery、DataTables的CSS和JS文件,否则表格无法正常初始化。
- 使用的
bg-warning、bg-danger是Bootstrap内置背景类,可根据项目需求替换为自定义样式类。
内容的提问来源于stack exchange,提问作者ceaiius
相关产品推荐
相关产品推荐

