javascript - 表单上的 Drupal 动态选择

标签 javascript php jquery drupal form-api

我确信这对 jQuery 专家来说很简单,但我是一名后端人员,找不到执行此操作的最佳方法。我在 Drupal 中有两个数组,一个是 View 名称列表,另一个是包含每个 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(),
);

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

最佳答案

做到你所要求的并不难。

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

    array(
      1 => 'a-a',
      2 => 'a-b',
      3 => 'a-c',
      4 => 'a-d',
      1 => 'b-a',
      2 => 'b-b',
    )
    
  2. 现在你有两个选择
    1. 您使用
      将每个 View 的选项发送到javascript drupal_add_js($array, 'setting') .这会将 $array 添加到 Drupal.settings 变量。
    2. 您可以通过 AJAX 获取选项。在这种情况下,您必须使用 hook_menu 创建一个菜单项。 .
  3. 现在您只需要对 View 选择中的更改使用react,并相应地添加它们的选项,从 ajax 调用或 js 变量中获取它们。我建议使用变量方法。这可能看起来像这样:

    $("#edit-view").change(function(){
        $("#edit-view_display").html(Drupal.settings.myVariable[$(this).val()]);
    }).change();
    

    您需要将此 js 添加到您的表单中。您可以将它放在一个 js 文件中,将其包装在 $(document).ready 中,然后使用 drupal_add_js

  4. 添加它

关于javascript - 表单上的 Drupal 动态选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388436/

相关文章:

javascript - 来自 JSON 对象 : '0' is false?

php - 如何在 foreach 循环内划分数组结果?

ajax - 避免 Web 应用程序上出现 "page loading"闪烁,同时仍然在需要时提供消息

jquery - 需要 HTMLImageElement 但在迭代 img 标签的 jQuery 列表时得到简单的对象

jquery - 简单的 ui 高度以获取完整的浏览器

javascript - jquery/javascript 中的近似文本匹配

javascript - 如何在 react 中对待全局用户/用户数据?

javascript - 按域构建 Redux 状态?

php - PHP/MySQL 插入问题

php - 在 Woocommerce 中使用电子邮件 ID 定位特定电子邮件