You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:56:09