Discourse 코드베이스 전반의 렌더링 시스템 표준화를 위한 지속적인 노력의 일환으로, 토픽 목록(topic-list) 구현 방식을 교체하고 있습니다.
기존에는 ‘raw handlebars’(.hbr) 방식을 사용했으며, 템플릿 오버라이드와 raw-plugin-outlets를 통해 커스터마이징할 수 있었습니다. 새로운 토픽 목록 구현은 최신 Glimmer 컴포넌트를 사용하며, 지속 가능한 방식으로 커스터마이징할 수 있도록 처음부터 다시 설계되었습니다.
새로운 구현은 이제 glimmer_topic_list_mode 설정 뒤에 사용 가능합니다.
disabled: 레거시 “raw handlebars” 토픽 목록 사용auto: 현재 플러그인과 테마의 호환성을 감지합니다. 호환되지 않는 항목이 있으면 레거시 시스템을 사용하고, 그렇지 않으면 새로운 구현을 사용합니다.enabled: 새로운 토픽 목록 구현을 사용합니다. 호환되지 않는 플러그인이나 테마가 있는 경우 사이트가 손상될 수 있습니다.
이미 대부분의 공식 테마와 플러그인을 새로운 메뉴와 호환되도록 업데이트했습니다. 하지만 토픽 목록을 커스터마이징하는 서드파티 플러그인, 테마 또는 테마 컴포넌트를 사용 중이라면 해당 항목들의 업데이트가 필요합니다.
호환성 문제의 원인을 식별하는 경고가 브라우저 콘솔에 출력됩니다.
롤아웃 타임라인
이는 변경될 수 있는 대략적인 추정치입니다
2024년 4분기:
코어 구현 완료
공식 테마/플러그인 업데이트 (진행 중)
Meta에서 활성화됨
업그레이드 가이드 게시됨
2025년 1분기:
-
공식 테마/플러그인 업데이트 -
glimmer_topic_list_mode기본값을auto로 설정; 콘솔 비추천(deprecation) 메시지 활성화 -
비추천(deprecation) 항목이 남아있는 문제를 관리자에게 경고 배너로 표시 -
서드파티 플러그인과 테마 업데이트 필요
-
3월 1일 - 모든 사이트에서 새로운 토픽 목록 활성화. 사이트 설정의 기본값이 enabled로 전환되지만, 'disabled’로 되돌리는 것은 여전히 가능합니다
2025년 2분기
4월 1일 이후 - 레거시 모드 및 관련 코드 최종 제거
나에게 어떤 의미가 있는가?
플러그인이나 테마에 ‘raw handlebars’ 파일(이름이 .hbr 또는 .raw.hbs인 파일)이 있다면, 새로운 버전과 호환되도록 업데이트해야 합니다. Ember 컴포넌트/루트를 위한 일반 .hbs 파일은 이 변경 사항의 영향을 받지 않습니다.
component:topic-list 또는 component:topic-list-item에 modifyClass를 사용하는 경우에도 업그레이드가 필요합니다.
사이트에 이러한 호환되지 않는 커스터마이징이 있는 경우, 브라우저 개발자 콘솔에 어떤 테마/플러그인이 원인이 되는지에 대한 정보를 포함한 경고 메시지가 출력됩니다.
대체 방안은 무엇인가?
일부 구형 raw-plugin-outlets는 일반 Plugin Outlets으로 전환되었습니다. 이러한 항목들은 1:1 방식으로 업데이트할 수 있습니다.
더 복잡한 커스터마이징은 개별적으로 평가해야 합니다. 새로운 토픽 목록은 쉽고 견고한 커스터마이징을 위한 여러 새로운 API를 제공합니다. 자세한 내용은 여기에서 확인하세요:
다음은 몇 가지 예시입니다:
-
discourse-assign은 특정 토픽 목록에 새로운 컬럼을 도입합니다 -
discourse-calendar는 새로운 플러그인 아웃렛 중 하나를 사용하여 이벤트 날짜 배지를 표시합니다 -
discourse-solved는 이전의 modifyClass를 대체하기 위해 새로운 valueTransformer를 사용합니다
다른 커스터마이징은 어떻게 되는가?
도입한 새로운 API를 사용하여 커스터마이징을 달성할 수 없는 경우, 논의하기 위해 새로운 Development 토픽을 만들어 알려주세요.
저는 플러그인/테마 개발자입니다. 전환 기간 동안 구형과 신형 토픽 목록 모두를 지원하는 테마/플러그인으로 업데이트하는 방법은 무엇인가요?
새로운 플러그인 아웃렛은 구형과 신형 토픽 목록 구현 모두에서 렌더링됩니다. 따라서: 새로운 구현을 구현한 후에는 단순히 구형 raw-plugin-outlet 커넥터를 삭제하면 됩니다.
템플릿 오버라이드나 비모던화(non-modernized)된 아웃렛을 대체하는 DAG 기반 커스터마이징의 경우, 전환 기간 동안 두 가지 구현을 모두 유지해야 합니다.
테마/플러그인이 구형과 신형 구현 모두를 지원하는 경우, 모든 .hbr 파일 상단에 이 마법 주석(magic comment)을 추가할 수 있습니다:
{{!-- has-modern-replacement --}}
이렇게 하면 비추천(deprecation) 메시지가 조용해지고, “auto” 모드일 때 새로운 구현이 사용될 수 있게 됩니다.


