Datatables服务端实现covered_from与covered_to两列数据合并
Datatables服务端合并covered_from与covered_to列实现方案
要实现将covered_from和covered_to两列合并为一列显示的需求,只需对现有$columns数组做两处核心修改:
1. 移除独立的covered_to列定义
删除原数组中dt=4的covered_to列配置,因为该列内容将合并到dt=3的列中展示。
2. 扩展covered_from列的格式化函数
修改covered_from列的formatter函数,同时读取covered_from和covered_to的数值,保留原有的Halfday判断逻辑,合并后输出。
修改后的完整$columns数组代码
$columns = array( array( 'db' => 'employee_number', 'dt' => 0 ), array( 'db' => 'employee_name', 'dt' => 1 ), array( 'db' => 'leave_type', 'dt' => 2 ), array( 'db' => 'covered_from', 'dt' => 3, 'formatter' => function( $d, $row) { // 格式化covered_from日期 $from = date('F d, Y', strtotime($row['covered_from'])); // 处理covered_to的原有逻辑:空或Halfday时设为空 $to = $row['covered_to']; if(empty($to) || $to == "Halfday") { $to = ""; } else { $to = date('F d, Y', strtotime($to)); } // 合并输出,避免to为空时出现多余分隔符 return $to ? "{$from} - {$to}" : $from; } ), array( 'db' => 'reason', 'dt' => 4 ), // 后续列的dt值需依次前移一位 array( 'db' => 'number_of_days', 'dt' => 5 ), array( 'db' => 'cutoff', 'dt' => 6 ), array( 'db' => 'status', 'dt' => 7 ), );
关键说明
- 保留了原代码中对
covered_to的判断逻辑:当值为空或等于Halfday时,不显示该部分内容 - 合并输出时做了优化:仅当
covered_to有有效日期值时,才添加-分隔符,避免出现January 01, 2024 -这类多余格式 - 后续列的
dt值需依次前移一位(原dt=5及之后的列都减1),确保前端Datatables的列索引对应正确
内容的提问来源于stack exchange,提问作者Nagonus Lrak
相关产品推荐
相关产品推荐

