如何在drupal中将两个下拉列表设置为单个字段?

如何在drupal中将两个下拉列表设置为单个字段?,drupal,drupal-7,Drupal,Drupal 7,如何获得单个字段的两个下拉列表?例如,时间字段一个下拉列表显示小时(0-23),另一个下拉列表显示分钟(0-59) 如果您在Drupal 7站点上使用了一个自定义模块,那么可以包含一个为您进行转换的hook\u form\u alter实现。(有关此挂钩的详细说明,请参阅。) 基本上,您将希望连接到您试图更改的表单(可能通过在if子句中测试$form\u id,以确保它与您想要更改的表单匹配)并创建两个小时和分钟的新字段,同时隐藏显示您试图存储的时间的内置字段。下面是一个例子: function

如何获得单个字段的两个下拉列表?例如,时间字段一个下拉列表显示小时(0-23),另一个下拉列表显示分钟(0-59)

如果您在Drupal 7站点上使用了一个自定义模块,那么可以包含一个为您进行转换的
hook\u form\u alter
实现。(有关此挂钩的详细说明,请参阅。)

基本上,您将希望连接到您试图更改的表单(可能通过在
if
子句中测试
$form\u id
,以确保它与您想要更改的表单匹配)并创建两个小时和分钟的新字段,同时隐藏显示您试图存储的时间的内置字段。下面是一个例子:

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'),
    );
  }
}
函数mymodule\u form\u alter(&$form,&$form\u state,$form\u id){
如果($form\u id=='my\u form\u id'){
$form['original#u time_field']['#type']='hidden';
$hours=array();
对于($digit=0;$digit<24;$digit++){
$hours[$digit]=$digit;
}
$minutes=array();
对于($digit=0;$digit<60;$digit++){
$minutes[$digit]=$digit;
}
$form['hours']=数组(
“#键入”=“选择”,
“#选项”=$hours,
“#title”=t('Hours'),
);
$form['minutes']=数组(
“#键入”=“选择”,
“#选项”=$minutes,
“#title”=t(‘分钟’),
);
}
}
那么你有两个选择。您可以包括一个自定义的
.js
文件,该文件监听小时和分钟下拉列表的更改并动态重写隐藏的时间字段值,或者您可以为所讨论的表单编写一个自定义提交处理程序(使用表单API或实现相应的
钩子表单提交
函数)它使用
$form_state
变量组合两个虚拟字段,并将结果值写入实时字段