我对Drupal 7相对较新,我正在尝试创建自定义网络表单。我的目标是在日期选项中添加一个日期(由日期模块提供)字段。所以它显示在月份和年份隐藏日期选项。
我已经设法实现了这一点,但只是通过将wholedate字段重新创建为自定义字段,但我想知道是否可以自定义日期模块提供的日期字段。
以下是我的表单的屏幕截图:
我如何创建自定义日期字段:
function my_webform_form_alter(&$form, &$form_state) {
if (isset($form['#node']->webform) && $form['#node']->uuid == '00b20537-d5ce-45c2-af37-150c9e73b96d') {
//$form['submitted']['date']['#type'] = 'hidden';
$form['ggg'] = array(
'#type' => 'date_select',
'#title' => 'Date',
'#date_format' => 'm/Y',
'#default_value' => date('Y-m-d')
);
}
}
我已经尝试过隐藏字段组件的其他方法,但到目前为止似乎没有任何工作。我想知道是否需要实现一个与alter hook(正在使用的那个)不同的钩子。
有关如何实现这一目标的任何建议吗?
答案 0 :(得分:1)
可能的解决方案是将日期组件的day
字段转换为hidden
字段,而不是select
字段类型。这可以通过为该字段添加#process
回调并更改数据来实现。
function YOURMODULE_form_alter(&$form, &$form_state, $form_id)
{
// Your logic here depending which form to alter
// ...
// Add #process for the component with key name 'date'
$form['submitted']['date']['#process'][] = 'YOURMODULE_process_date';
}
function YOURMODULE_process_date(&$element)
{
// change type to hidden
$element['day']['#type'] = 'hidden';
// set value to first day of the month
$element['day']['#value'] = '1';
return $element;
}
答案 1 :(得分:0)
Webform现在允许隐藏日期的日期,月份或年份。有关详细信息,请参阅this issue。