Drupal onChange会自动填充另一个CCK选择列表

时间:2010-01-07 10:11:17

标签: forms drupal cck

我已经使用CCK构建了一个多步骤表单,但是我有几个未解决的问题,但不确定CCK是否可以提供帮助。

在表单的一个步骤中,我有两个选择框,第一个是从词汇表中自动填充,代码如下,并且所有选择都很好。

$category_options = array();
$cat_res = db_query('select vid, name from vocabulary WHERE vid > 1 ORDER BY name ASC');
while ($cat_options = db_fetch_object($cat_res)) {
  $category_options[$cat_options->vid] = $cat_options->name;
}
return $category_options;

我想要做的是,当用户从词汇表列表中选择一个项目时,它会自动使用term_data表中的术语填充另一个选择框。我有2个问题;

1)我已将以下代码添加到第二个选择列表中,只是为了确保它有效(IT没有)。有一个与每个词汇表相关的多个术语,但是第二个sql statemant只返回一个结果,当它应该返回几个时,(SO SOMETHING WRONG HERE)。例如,在term_date表中有6个术语,vid为3,但我只添加了一个选择列表。

$term_options = array();  
$term_res = db_query('select vid, name from term_data WHERE vid = 3 ORDER BY name ASC'); while ($options = db_fetch_object($term_res)) {    
$term_options[$options->vid] = $options->name;  
}  
return $term_options;

2)我可以在第一个选择列表中添加onChange来调用函数以使用CCK自动填充第二个列表,或者我是否必须倾向于使用FORM API来完成整个表单。

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:0)

查询中的错误似乎是一个错误。我试图纠正:

$term_res = db_query('select tid, name from term_data WHERE vid = 3 ORDER BY name ASC'); 
while ($options = db_fetch_object($term_res)) {    
  $term_options[$options->tid] = $options->name;
}

在您的代码中,您选择的vid实际上对所有术语都相同。然后你在同一个key =>下的$ term_options数组中添加了术语名称。所以你只有一个元素。

考虑第二个问题:我会将整个数据结构(所有词汇表及其术语)作为json发送到客户端(从drupal代码向页面插入js脚本)并实现jquery所需的功能。