在安装了日期模块的drupal 7中,在构建表单时,我想简单地(通过表单)收集某些事情发生的时间。
使用表单api时,我将我的字段定义如下
$form['dose']['time'] = array(
'#type' => 'date_popup',
'#title' => t('Start Time'),
'#date_format' => 'h:i A',
);
这在屏幕上显示得很好,带有我想要的时间选择器。
在我的提交函数中处理它时,我没有得到此表单字段的值。它是空白的。
如果我将此更改为
$form['dose']['time'] = array(
'#type' => 'date_popup',
'#title' => t('End Date'),
'#date_format' => 'Y-m-d',
);
然后我的提交函数看到这个表单字段就好了,但它也显示了一个日期选择器,我不能为这个字段。
如果我为第一个例子设置#require = TRUE,那么验证失败,可能是因为没有选择Y,m,d。如果有一种方法可以为此设置一个BS值,我可以使用它,因为我可以稍后解析它。
在旁注中,我也尝试了大致相同的形式类型date_select,结果完全相同。
有没有办法在drupal中使用原生表单api并且能够通过选择器实际获得时间?
答案 0 :(得分:2)
看起来Date模块创建了一个需要日期和时间的DateObject;如果有效则返回日期,否则返回NULL。因此,使用日期模块功能可能无法按您希望的方式工作。
也许您可以将该字段创建为常规文本字段,并使用您选择的jQuery时间选择器(例如http://fgelinas.com/code/timepicker/)附加到文本字段作为您的时间选择器。
答案 1 :(得分:1)
$form['booking'] = array(
'#title' => t('Booking'),
'#type' => 'date_popup',
'#description' => t('Please select the date of booking'),
'#required' => TRUE,
'#date_format' => 'Y-m-d h:i A',
'#date_year_range' => '-0:+1',
);
答案 2 :(得分:0)
解决方法是从$form_state['input']
数组中检索仅限时间的日期字段。
答案 3 :(得分:0)
我刚遇到同样的问题。这是我的解决方案:
drupal_add_library('date_popup', 'timeentry');
$func = 'timeEntry';
$settings = array(
'show24Hours' => TRUE,
'showSeconds' => FALSE,
'timeSteps' => array(1, 10, 0), // Hours, Minutes, Seconds.
'spinnerImage' => '',
'fromTo' => FALSE,
);
$id = date_popup_js_settings_id('export-time', $func, $settings);
$form['time'] = array(
'#type' => 'textfield',
'#title' => t('Time'),
'#id' => $id,
'#size' => 8,
'#maxlength' => 10,
'#field_suffix' => t('o\'clock'),
);