如何创建模式窗口(弹出窗口)?


10

我正在尝试使用Drupal 8的核心功能在模式窗口中打开页面。不幸的是,很难找到有关它的一些官方文档,而且涉及该主题的大多数博客似乎都已过时。但据我所知,应该可以通过向a元素添加以下属性来创建模式对话框:

class="use-ajax” data-dialog-type="modal"

因此,完整的示例如下所示:

<a href="/impressum/lizenzen/43" class="use-ajax" data-dialog-type="modal">
   <span class="glyphicon glyphicon-copyright-mark" aria-hidden="true"></span>
</a>

在我的情况下/impressum/lizenzen/43是指向视图页面的路径。

这似乎有效,但仅当我以管理员身份登录时才有效。因为这似乎不是权限问题,所以我认为它与管理主题(Seven)有关,该主题可能包含一些Bootstrap(我在我的网站上使用的)可能没有的核心库。但是奇怪的是,在模式的标题栏中出现了字符串“ Array”,而不是页面标题,这让我认为是发生了意外的数组与字符串对话: 在此处输入图片说明

有人可以吗

  • 带我去看核心模态API的官方文档,
  • 向我解释一下,它仅以管理员身份工作的原因可能是什么。
  • 最后告诉我,为什么实际上发生了一个数组到字符串的对话,称为模式?

Answers:


6

这是您提到的API更改的官方文档:

模态/对话框/ ajax使用查询参数代替接受标头

最重要的细节是附加此库:

$build['#attached']['library'][] = 'core/drupal.dialog.ajax';

您问为什么在没有此功能的管理页面上可以使用此功能。原因是,管理页面已经依赖于大多数Drupal jQuery库,而非管理页面的加载没有开箱即用的jQuery(这在D8中是一个很大的性能改进)。

引导主题

如果在Bootstrap主题的主题设置中启用,“ jQuery Modal”将替换为“ Bootstrap Modal”,请参见以下代码片段:

LibraryInfo :: alter()

elseif ($extension === 'core') {
  // Replace core dialog/jQuery UI implementations with Bootstrap Modals.
  if ($this->theme->getSetting('modal_enabled')) {
    $libraries['drupal.dialog']['override'] = 'bootstrap/drupal.dialog';
    $libraries['drupal.dialog.ajax']['override'] = 'bootstrap/drupal.dialog.ajax';
  }

为此,您需要附加与上述相同的核心库,以便Bootstrap主题可以找到这些核心库以覆盖它们。


页面仍然加载并且用户单击按钮时,弹出窗口有问题吗?页面将重定向到页面弹出URL。
乔纳(Jonh)

我试图使它在节点窗体上工作,但到目前为止无法。是否应该简单地将链接添加到具有适当属性的节点表单,以触发加载模式?我将其添加为alter ... <a href="https://drupal.stackexchange.com/node/43" class="use-ajax" data-dialog-type="modal"> test </a>
awm

是的,这应该可行。在浏览器中检查所提到的js库是否已加载并正常运行(在系统性能设置中禁用js文件聚合以查看所有js文件)。
4k4

5

对于试图将其添加到主题的任何人,您都可以在JSdependancies下将drupal.dialog.ajax添加到您的library.yml文件中:

- core/drupal.dialog.ajax

更多关于主题依赖的信息


2
这不能为我解决问题。在引导主题中,默认情况下已包含此库。
user5950

4

我也为文档苦苦挣扎。但是,我可以使用Dialog API D8 Core提供的Modal工作。

confirmationDialog = Drupal.dialog(CONTENT_OF_MODAL, {
  dialogClass: 'ADD_ANY_CLASSES',
  resizable: false,
  closeOnEscape: false,
  create: function () {
    $(this).parent().find('.ui-dialog-titlebar-close').remove();
  },
  beforeClose: false,
  close: function (event) {
    $(event.target).remove();
  }
});

显示模态

confirmationDialog.showModal();

关闭模态

confirmationDialog.close();


1

您的主题需要声明对core / drupal.ajax的依赖,因为匿名用户不会自动加载ajax。

dependencies:
    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.