如何为单个字段获得两个下拉列表?例如,时间字段一下降几小时(0-23),其他下拉几分钟(0-59)。
答案 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
变量组合您的两个虚拟字段并将结果值写入实时字段。