Удалить опцию "Внутренняя ссылка" из средства выбора ссылок Wagtail RichTextField

Моя компания использует Wagtail как безголовый API, используя его больше как способ хранения фрагментов контента, а не целых страниц. Таким образом, есть случайные особенности, которые для нас не имеют смысла. В данном случае это функция "внутренней ссылки". Поскольку мы не управляем "страницами" как таковыми, я бы хотел удалить эту опцию из средства выбора, находящегося в поле форматированного текста, как показано ниже.

Я определил несколько шаблонов администратора, которые можно переопределить, чтобы удалить эту функцию, но я хотел сначала посмотреть, есть ли что-то, что может просто отключить эту опцию "внутренняя ссылка", чтобы она просто не отображалась.

Шаблон _link_types.html позволит мне удалить внутреннюю связь как выбор, но это, кажется трясогузка по умолчанию используется внутренняя линия связи, которая означает, что даже если эта опция исчезла, выбирающий Внутренняя ссылка все еще показывает вверх. Если исключить простую опцию, которую можно отключить, где мне искать выбор по умолчанию для внешней ссылки?

2 ответа

Ниже представлен подход, он кажется немного взломанным, и было бы здорово, если бы существовал более естественный способ сделать это, но, надеюсь, это поможет.

См. Документацию для объяснения крючков Wagtail.

Шаг 1 - скройте опцию внутренней ссылки

  • Используйте крючок insert_editor_css чтобы ввести CSS, чтобы "скрыть" первую ссылку.
  • Этим достигается та же цель, что и _link_types Вы пытались переопределить шаблон, но "ограничивает" это только модальным редактором.
  • Это важно, так как вы хотите избежать разрыва "страницы перемещения" и сценариев, в которых будет отображаться средство выбора страницы. CSS кажется немного взломанным, но, надеюсь, выполняет свою работу.

Шаг 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;
}
Другие вопросы по тегам