0

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

在表单的一个步骤中,我有 2 个选择框,第一个是使用以下代码从词汇表中自动填充的,并且一切正常。

$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 表中的术语填充另一个选择框。我有两个问题;

1)我已将以下代码添加到第二个选择列表中,只是为了确保它有效(它没有)。每个词汇表都有多个术语,但是第二个 sql 语句只返回一个结果,当它应该返回几个时,(这里有些错误)。例如,在 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 来完成我的整个表单。

任何帮助或想法将不胜感激。

4

1 回答 1

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。然后您将术语名称添加到同一键 => 下的 $term_options 数组中,因此您只有 1 个元素。

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

于 2010-01-08T08:52:31.000 回答