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

Drupal 7计算字段:添加条件判断的日期差值计算需求

没问题,我帮你搞定这个逻辑!咱们只需要给原来的计算代码加上患者状态的判断,就能实现停用后不再更新住院天数的需求,具体步骤如下:

修改计算字段的PHP逻辑

首先,我们要先获取field:active的状态值,再根据状态决定是否执行天数计算。下面是修改后的完整代码:

完整计算代码

// 获取入院日期字段的值
$field_date_of_admission = array_pop(field_get_items($entity_type, $entity, 'field_date_of_admission'));
// 获取患者激活状态字段的值
$field_active = array_pop(field_get_items($entity_type, $entity, 'field_active'));

// 先判断入院日期是否存在,避免空值导致报错
if ($field_date_of_admission) {
    $start_date = new DateObject($field_date_of_admission['value'], '');
    
    // 判断患者是否处于激活状态:只有状态为Yes时才计算天数差
    // 注意:Drupal 7的布尔Yes/No字段通常存1=Yes,0=No;如果是下拉框类型,可能存字符串'Yes'/'No',请根据实际字段调整
    if ($field_active && $field_active['value'] == '1') {
        $current_date = new DateObject('now', '', 'm/d/Y');
        $length_of_stay = $start_date->difference($current_date, 'days');
        $entity_field[0]['value'] = $length_of_stay;
    } else {
        // 患者停用后的处理逻辑,二选一即可:
        // 选项1:保留最后一次计算的住院天数(推荐,适合记录最终住院时长)
        // 这里不需要写任何代码,计算字段会自动保留之前的数值
        // 选项2:将值设为0或其他标识(比如'已出院',需确保字段类型支持字符串)
        // $entity_field[0]['value'] = 0;
    }
}

关键细节说明

  • 状态字段的取值:用和入院日期相同的field_get_items方法获取field_active的值,确保能正确拿到状态。
  • 布尔值判断调整:如果你的field:active是下拉选择框(不是默认的布尔字段),存储的是字符串比如'Yes'或'No',那把判断条件改成$field_active['value'] == 'Yes'就行。
  • 停用后的逻辑选择:
    • 要是想记录患者最后一次的住院天数,就用选项1,停用后不更新数值。
    • 要是需要明确标记停用状态,就用选项2,设置成0或者自定义文本(记得字段类型要匹配,比如文本类型才能存字符串)。
  • 空值防护:加了入院日期的空值判断,防止没填入院日期时代码报错。

测试小提示

改完代码后别忘做测试:

  • 找个测试患者,设置为激活状态,确认住院天数能正常更新。
  • 再把这个患者改成停用状态,更新节点后,检查字段值是否不再变化(或者按你选的逻辑处理)。

内容的提问来源于stack exchange,提问作者MS21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:57