如何在Drupal自定义表单中创建仅含年月的日期字段?
在Drupal自定义模块表单中实现仅含年月的日期字段
Drupal 7 实现方案
你提供的代码需要调整几个配置项才能正确显示仅含年月的日期选择器,以下是修正后的代码:
$form['filters']['report_month'] = array( '#type' => 'date', '#title' => t('Report Month'), '#date_date_format' => 'm/Y', '#date_date_element' => 'year_month', // 关键:设置为year_month才会显示年月选择控件 '#default_value' => date('Y-m-01'), // 传递Drupal可识别的Y-m-d格式字符串 '#date_year_range' => '-10:+1', // 可选:限制年份选择范围(过去10年到未来1年) );
参数说明:
#date_date_element: 必须设为year_month,这会让表单渲染出年份下拉框和月份选择器,而非完整日期控件。#default_value: 不能用m-Y格式,需传递Y-m-d格式的字符串(比如当月第一天)或DateTime对象,Drupal才能正确解析并回显。#date_year_range: 可选配置,格式为[起始偏移]:[结束偏移],比如-5:+0代表仅允许选择过去5年至当前年份。
Drupal 8/9/10 实现方案
Drupal 8及以上版本核心已集成日期字段功能,代码语法略有调整:
$form['filters']['report_month'] = [ '#type' => 'date', '#title' => $this->t('Report Month'), '#date_format' => 'm/Y', '#date_element' => 'year_month', '#default_value' => new \DateTime(), // 直接传入DateTime对象更简洁 '#date_year_range' => '-10:+1', ];
注意事项
- 确保你的站点已启用Date模块(Drupal 7需单独启用,Drupal 8+为核心内置)。
- 若需验证用户输入的有效性,可添加表单验证回调函数,检查年月格式是否合规。
内容的提问来源于stack exchange,提问作者Mohitk0509
相关产品推荐
相关产品推荐

