В рамках нашей ongoing-кампании по стандартизации систем рендеринга в кодовой базе Discourse мы заменяем реализацию списка тем.
Ранее использовался подход «raw handlebars» (.hbr), который можно было кастомизировать через переопределения шаблонов и raw-plugin-outlets. Новая реализация списка тем построена на современных компонентах Glimmer и разработана с нуля для устойчивой и долговечной кастомизации.
Новая реализация доступна через настройку glimmer_topic_list_mode:
disabled: используется устаревший «raw handlebars» список темauto: автоматически определяет совместимость ваших текущих плагинов и тем. Если найдены несовместимые элементы, будет использована устаревшая система; в противном случае — новая реализация.enabled: используется новая реализация списка тем. Если у вас есть несовместимые плагины или темы, сайт может работать некорректно.
Мы уже обновили большинство наших официальных тем и плагинов для совместимости с новым меню. Однако, если вы используете сторонние плагины, темы или компоненты тем, кастомизирующие список тем, их обновление обязательно.
В консоли браузера будут выводиться предупреждения, указывающие источник несовместимости.
График внедрения
Это приблизительные оценки, которые могут быть изменены
IV квартал 2024 года:
реализация в ядре завершена
обновление официальных тем/плагинов (в процессе)
включено на Meta
опубликованы рекомендации по обновлению
I квартал 2025 года:
-
обновление официальных тем/плагинов -
настройка glimmer_topic_list_modeпо умолчанию установлена вauto; включены сообщения об устаревании в консоли -
предупреждения об устаревании будут вызывать административное предупреждение для любых оставшихся проблем -
сторонние плагины и темы должны быть обновлены
-
1 марта — включение нового списка тем для всех сайтов. Значение по умолчанию для настройки сайта будет изменено на enabled, но возможность переключения обратно наdisabledостанется
II квартал 2025 года
после 1 апреля — окончательное удаление устаревшего режима и связанного кода
Что это значит для вас?
Если ваш плагин или тема содержат файлы «raw handlebars» (с именами .hbr или .raw.hbs), их необходимо обновить для совместимости с новой версией. Обычные файлы .hbs для компонентов/маршрутов Ember не затрагиваются этим изменением.
Обновление также потребуется, если вы используете modifyClass для component:topic-list или component:topic-list-item.
Если ваш сайт содержит подобные несовместимые кастомизации, в консоли разработчика браузера будут выводиться предупреждающие сообщения с информацией о том, какой плагин или тема является причиной проблемы.
Какие замены предусмотрены?
Некоторые старые raw-plugin-outlets были преобразованы в обычные Plugin Outlets. Их можно обновить в режиме 1:1.
Более сложные кастомизации требуют индивидуальной оценки. Новый список тем предоставляет ряд новых API для простой и надежной кастомизации. Подробнее здесь:
Вот несколько примеров:
-
discourse-assignдобавляет новый столбец в конкретный список тем -
discourse-calendarиспользует один из новых plugin outlets для отображения значка даты события -
discourse-solvedиспользует новый valueTransformer для замены предыдущего modifyClass
А как насчет других кастомизаций?
Если вашу кастомизацию невозможно реализовать с помощью новых API, которые мы представили, пожалуйста, сообщите нам, создав новую тему Development для обсуждения.
Я автор плагина/темы. Как обновить тему/плагин для поддержки как старого, так и нового списка тем в период перехода?
Новые plugin outlets рендерятся как в старой, так и в новой реализации списка тем. Поэтому: после реализации новой версии просто удалите старый raw-plugin-outlet connector.
Для кастомизаций на основе DAG, которые заменяют переопределения шаблонов или несовременные outlets, необходимо поддерживать обе реализации в течение переходного периода.
Как только ваша тема/плагин поддерживает обе реализации, вы можете добавить этот магический комментарий в начало всех ваших файлов .hbr:
{{!-- has-modern-replacement --}}
Это отключит сообщения об устаревании и позволит использовать новую реализацию в режиме «auto».


