Javascript 窗体上的Drupal动态选择
我相信这对jQuery专家来说很容易,但我是一个后端人员,找不到最好的方法。我在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
//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配置标题,选择站点范围的动画延迟,等等。您甚至可以通过分层选择创建新项目和级别