如何使用drupal 7 date_popup来获取时间?

时间:2011-03-26 20:46:37

标签: drupal forms drupal-7

在安装了日期模块的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并且能够通过选择器实际获得时间?

4 个答案:

答案 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'),
);