Javascript 窗体上的Drupal动态选择

Javascript 窗体上的Drupal动态选择,javascript,php,jquery,drupal,form-api,Javascript,Php,Jquery,Drupal,Form Api,我相信这对jQuery专家来说很容易,但我是一个后端人员,找不到最好的方法。我在Drupal中有两个数组,一个是视图名称列表,另一个是包含每个视图显示列表的数组。下面是填充这两个数组的代码: //load list of views in to array for select lists $views = views_get_all_views(); $viewnames = array(); $viewdisplays = array(); foreach ($views as $view

我相信这对jQuery专家来说很容易,但我是一个后端人员,找不到最好的方法。我在Drupal中有两个数组,一个是视图名称列表,另一个是包含每个视图显示列表的数组。下面是填充这两个数组的代码:

 //load list of views in to array for select lists
$views = views_get_all_views();
$viewnames = array();
$viewdisplays = array();
foreach ($views as $view) {
  $viewnames[$view->name] = $view->name; 
  foreach ($view->display as $k) {
    $id = $k->id;
    $title = $k->display_title;
    $viewdisplays[$view->name]['id'] = $id;
    $viewdisplays[$view->name]['title'] = $title;
  }
}
下面是我正在使用的表单的片段:

$form['view'] = array(
  '#type' => 'select',
  '#title' => t('Select the view to be used for display'),
  '#options' => $viewnames,
);
$form['view_display'] = array(
  '#type' => 'select',
  '#title' => t('Select the display of the gallery view to be used'),
  '#options' => array(),
);

我想做的是用适当的值动态地填充视图显示选择框。如果用户从“视图”选择中选择了我最喜欢的视图,我想显示$viewdisplays['My Favorite View']数组作为“视图显示”字段的选项。

按照您的要求执行任务并不困难

Drupal知道选择表单项有哪些选项,因为它保留表单的副本。因此,您需要预先填充要更改的select的选项以及它可以拥有的所有选项。您还需要确保它们的值是唯一的,这样您就不会得到这样的数组:

array(
  1 => 'a-a',
  2 => 'a-b',
  3 => 'a-c',
  4 => 'a-d',
  1 => 'b-a',
  2 => 'b-b',
)
$("#edit-view").change(function(){
    $("#edit-view_display").html(Drupal.settings.myVariable[$(this).val()]);
}).change();
现在你有两个选择 使用以下命令将每个视图的选项发送到javascript . 这将把$array添加到Drupal.settings变量中。 您可以通过AJAX获得这些选项。在这种情况下,您必须使用创建菜单项。 现在,您只需要对视图的select中的更改做出反应,并相应地添加它们的选项,或者从ajax调用或js变量获取它们。我建议使用可变方法。可能看起来像这样:

array(
  1 => 'a-a',
  2 => 'a-b',
  3 => 'a-c',
  4 => 'a-d',
  1 => 'b-a',
  2 => 'b-b',
)
$("#edit-view").change(function(){
    $("#edit-view_display").html(Drupal.settings.myVariable[$(this).val()]);
}).change();
您需要将此js添加到表单中。您可以将它放在一个js文件中,将其包装在$document.ready中,并使用drupal_add_js添加它

你看到模块了吗?这是一个CCK字段类型

有关此模块的更多详细信息,请参见其项目页面:

。。。定义hierarchy_select表单元素,这是一种让用户在层次结构中选择项目的增强方式

分层选择能够保存选择的整个谱系或仅保存最深的选择。您可以将其配置为强制用户在树中进行尽可能深的选择,或允许用户在树中的任何位置选择项目。可以标记级别,可以配置限制可以选择的项目数量,为dropbox配置标题,选择站点范围的动画延迟,等等。您甚至可以通过分层选择创建新项目和级别