如何在drupal中获得两个下降到单个字段?

时间:2013-05-14 14:21:33

标签: drupal drupal-7

如何为单个字段获得两个下拉列表?例如,时间字段一下降几小时(0-23),其他下拉几分钟(0-59)。

1 个答案:

答案 0 :(得分:1)

如果您在Drupal 7网站上使用了自定义模块,则可以包含hook_form_alter的实现,为您进行转换。 (有关此挂钩的详细说明,请参阅http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_alter/7。)

基本上,您需要挂钩到您尝试更改的表单(可能通过在$form_id子句中测试if来确保它与您要更改的表单匹配)并创建两个小时和分钟的新字段,同时隐藏显示您尝试存储的时间的内置字段。这是一个例子:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'my_form_id') {
    $form['original_time_field']['#type'] = 'hidden';
    $hours = array();
    for ($digit = 0; $digit < 24; $digit++) {
      $hours[$digit] = $digit;
    }
    $minutes = array();
    for ($digit = 0; $digit < 60; $digit++) {
      $minutes[$digit] = $digit;
    }
    $form['hours'] = array(
      '#type' = 'select',
      '#options' = $hours,
      '#title' = t('Hours'),
    );
    $form['minutes'] = array(
      '#type' = 'select',
      '#options' = $minutes,
      '#title' = t('Minutes'),
    );
  }
}

然后你有几个选择。您可以包含一个自定义.js文件,用于监听小时和分钟下拉的更改并动态重写隐藏的时间字段值,或者您可以为相关表单编写自定义提交处理程序(使用表单API或通过实现适当的hook_form_submit函数),该函数使用$form_state变量组合您的两个虚拟字段并将结果值写入实时字段。