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
相关产品推荐
相关产品推荐

