3

我的公司将 Wagtail 作为无头 API 运行,更多地使用它来存储部分内容而不是整个页面。因此,偶尔会有一些对我们没有意义的功能。在这种情况下,它是“内部链接”功能。由于我们本身不管理“页面”,我想从富文本字段上的选择器中删除此选项,如下所示。

在此处输入图像描述

我已经确定了几个可以被覆盖以删除此功能的管理模板,但我想先看看是否有一些东西可以简单地禁用这个“内部链接”选项,以便它甚至不显示。

_link_types.html模板允许我选择删除内部链接,但 Wagtail 似乎默认为内部链接,这意味着即使该选项消失,内部链接选择器仍会显示。除非有一个可以关闭的简单选项,否则我应该在哪里寻找外部链接的默认选择?

4

1 回答 1

3

下面是一种方法,感觉有点hacky,如果有更自然的方法来做到这一点,那就太好了,但希望这会有所帮助。

有关Wagtail Hooks的说明,请参阅文档。

第 1 步 - 隐藏内部链接选项

  • 使用钩子insert_editor_css注入一些 CSS 来“隐藏”第一个链接。
  • _link_types这实现了与您尝试的模板覆盖相同的目标,但仅将其“范围”到编辑器模式。
  • 这很重要,因为您要避免破坏“移动页面”和显示页面选择器的场景。css 感觉有点 hacky,但希望能完成工作。

第 2 步 - 将内部链接选项覆盖为模态的外部链接

  • 使用钩子insert_editor_js覆盖该window.chooserUrls.pageChooser值,这将再次出现在编辑器页面上,并且仅适用于模态框。
  • 将此值设置为您想要的新“默认值”,在下面的代码中,我们已将其设置为外部链接选项。
  • 您可以在editor_js.html模板中查看这些值是如何全局设置的。

代码


# file: wagtail_hooks.py

from django.contrib.staticfiles.templatetags.staticfiles import static
from django.utils.html import format_html
from django.urls import reverse

from wagtail.core import hooks


@hooks.register('insert_editor_css')
def editor_css():
    """Add /static/css/admin.css to the admin."""
    return format_html(
        '<link rel="stylesheet" href="{}">',
        static("css/admin.css")
    )


@hooks.register('insert_editor_js')
def editor_js():
    return format_html(
        """
        <script>
            window.chooserUrls.pageChooser = '{}';
        </script>
        """,
        reverse('wagtailadmin_choose_page_external_link')
    )
/* file: static/css/admin.css */

.modal-content .link-types :first-child {
  /* hide the 'internal' link option from the page chooser */
  display: none;
}

.modal-content .link-types {
  /* ensure the 'before' element can be positioned absolute */
  position: relative;
}

.modal-content .link-types::before {
  /* hide the left '|' bar */
  background: white;
  bottom: 0;
  content: '';
  left: 0;
  position: absolute;
  top: 0;
  width: 5px;
}
于 2019-11-17T05:36:16.370 回答