사이드바용 메시지 섹션

:information_source: 요약 사이드바에 개인 및 그룹 메시지 받은 편지함 링크를 추가하며, 읽지 않은 메시지 표시기를 포함합니다
:eyeglasses: 미리보기 Theme Creator
:hammer_and_wrench: 저장소 GitHub - moin-Jana/sidebar-messages-section: Adds personal and group message inbox links to the sidebar, including unread message indicators. · GitHub
:question: 설치 가이드 테마 또는 테마 컴포넌트 설치 방법
:open_book: Discourse 테마를 처음 사용하시나요? Discourse 테마 사용 입문가 가이드

이 테마 컴포넌트 설치

이 컴포넌트는 사이드바에 메시지 섹션을 추가하여 개인 메시지 받은 편지함 링크를 표시합니다. 사용자의 개인 받은 편지함과 접근 권한이 있는 모든 그룹 받은 편지함을 포함합니다. 해당 섹션에는 섹션 제목 옆에 새로운 개인 메시지를 작성하기 위한 버튼도 포함됩니다.

개인 받은 편지함

기본적으로 이 컴포넌트는 모든 사용자에게 개인 받은 편지함 링크를 추가합니다. show_personal_inbox 설정을 통해 관리자는 이를 완전히 숨기거나, Personal message enabled groups 사이트 설정에 따라 PM 생성이 허용된 사용자만 표시하도록 설정할 수 있습니다. 이는 개인 받은 편지함 링크가 알림 메뉴, 사용자 프로필, 사이드바의 커뮤니티 섹션에 표시되는 방식과 일치합니다.

:bulb: 개인 받은 편지함 링크가 중복 표시되지 않도록 하려면, 사이드바의 첫 번째 섹션에 있는 메시지 링크를 제거하는 것이 좋습니다. 더 보기 메뉴를 열고 이 섹션 사용자 지정을 선택한 후, 해당 섹션에서 메시지 링크를 제거하면 됩니다.

그룹 받은 편지함

최소 하나의 메시지가 있고 사용자가 회원인 모든 그룹 받은 편지함은 자동으로 해당 사용자의 사이드바에 표시됩니다. 관리자는 hide_group_inboxes 설정을 사용하여 특정 그룹 받은 편지함을 숨길 수 있으며, 이는 더 이상 능동적으로 사용되지 않는 그룹 받은 편지함인 경우 유용할 수 있습니다.

별도의 설정인 use_group_page_inbox을 사용하면 그룹 받은 편지함 링크가 사용자의 메시지 인터페이스(/my/messages/group/{group_name})에서 열리도록 할지, 아니면 그룹 페이지(/g/{group_name}/messages/inbox)에서 열리도록 할지 선택할 수 있습니다.

읽지 않은 표시기

각 받은 편지함 링크는 사용자의 “새 항목 수 표시” 선호도에 따라 현재 메시지 상태를 표시합니다. 점(dot) 또는 숫자 카운트 중 하나입니다. 100을 초과하는 값은 99+로 표시됩니다.

고급 그룹 받은 편지함 구성

그룹 받은 편지함의 순서를 사용자 지정하거나 사이드바에 표시되는 이름을 변경하려면 advanced_group_inbox_configuration 설정을 사용할 수 있습니다.

이 설정에서 다음을 수행할 수 있습니다:

  • 드롭다운에서 그룹 선택
  • 사이드바에 표시될 사용자 지정 이름 선택적으로 정의
  • 하단의 버튼을 사용하여 구성된 그룹 순서 변경

사용자 지정 이름은 설정 자체 내부에서도 유용합니다.
이름이 제공되지 않으면 항목은 group 1, group 2 등으로 라벨이 붙습니다(위치에 기반). 임시 이름을 추가하면 순서 변경이 더 쉬워질 수 있으며, 원하면 저장 전에 다시 제거할 수 있습니다.

메시지가 있는 그룹 중 고급 구성에 추가되지 않은 그룹은 여전히 사이드바에 표시되며, 구성된 그룹 뒤에 그룹 ID 순서대로 나열됩니다.

hide_group_inboxes 설정에 나열된 그룹은 고급 구성에도 존재하거나 메시지가 있든 상관없이 항상 숨겨집니다. 그룹이 두 설정 모두에 추가되었을 때 이를 강조하기 위한 관리자 전용 경고가 있습니다.

아래 스크린샷에서 예시 구성과 그것이 순서 및 표시 이름에 미치는 영향을 확인할 수 있습니다:


메시지 섹션의 위치

메시지 섹션의 위치를 변경하려면 CSS를 사용할 수 있습니다. 예를 들어

또는 Discourse Sidebar Menu Reorder 컴포넌트를 설치하고 위치를 조정할 때 섹션 이름으로 inbox-section을 사용할 수 있습니다. 또한 Navigation (sidebar) menu display control 컴포넌트의 order 설정을 사용할 수도 있습니다.

18개의 좋아요

와, 정말 잘하셨네요, Moin! :clap: :tada:

4개의 좋아요

작은 제안: javascripts/discourse/api-initializers/group-inboxes-in-sidebar.gjs 파일은 GJS 대신 JS 파일인 것이 더 나은 것 같습니다.

훌륭한 컴포넌트입니다!


지난 10분 동안 코드를 살펴보고 핵심 클래스를 검토해 보았는데, Discourse가 얼마나 놀랍도록 잘 만들어졌는지, 모든 것이 얼마나 자연스럽게 어우러지는지 감탄하지 않을 수 없었습니다.

3개의 좋아요

네, 이 API는 해당 섹션이 다른 모든 섹션과 동일한 외관과 기능을 갖추도록 필요한 거의 모든 것을 제공합니다. 채팅 기능도 이 API를 사용하며, 아마도 이것이 개발에 영향을 미쳤을 것입니다. 관련 기능들은 동시에 개발되었기 때문입니다.

불행히도, 핵심 섹션의 읽지 않은 주제 수를 표시하는 get badgeText()는 지원되지 않으므로, 숫자 처리를 위해 조금 창의적인 방법을 사용해야 했습니다.

4개의 좋아요

이 기능을 위한 관리자 설정을 찾을 수 없어서, CSS를 통해 이를 숨기는 방법을 공유합니다:

.sidebar-section-link[data-link-name="my-messages"] {
    display: none;
}

@Moin, 테마 구성 요소에 이를 숨길 수 있는 체크박스를 추가할 수 있을까요?

2개의 좋아요

기존에 관리자용 사이드바 커스터마이징 옵션이 있는데, 왜 CSS로 링크를 숨기는 방식을 선호하시나요? 내장된 Discourse 옵션을 사용하는 것보다 CSS로 숨기는 방식이 깨질 가능성이 더 높아 보입니다.

2개의 좋아요

아, 맞네. 내가 너무 복잡하게 생각했어. 관리자 콘솔의 설정이거나 핵심 기능일 줄 알았거든.

1개의 좋아요

거기서 찾고 있는 건 너뿐이 아니야. :joy:


이 컴포넌트가 정말 귀엽네!

2개의 좋아요

메모를 확장했습니다:

5개의 좋아요

네, 맞아요. 하지만 관리자로서 우리는 보통 관리자 패널을 통해 작업을 처리하는 데 익숙하죠. :wink:. 지시사항을 대충 훑어볼 때 일부 세부 사항을 놓치기 쉽습니다.

코어 업데이트의 경우에도, 우리가 사용하는 기능이 다른 영역으로 이동한 후에야 비로소 모든 세부 사항을 꼼꼼히 읽게 되는 경우가 많을 거예요.

예를 들어, 아주 오래전 안드로이드에서 Gingerbread는 Nav와 Maps를 별도로 제공했었죠. 업데이트에서 Nav를 Maps에 통합했을 때, Nav를 찾기 위해 약 10분 동안 헤맸던 기억이 납니다. :joy:

이것은 메시지에 크게 의존하는 사이트에 적합할 만큼 훌륭한 테마 컴포넌트입니다! @moin 님의 훌륭한 작업에 감사드립니다!

그룹을 많이 사용하는 사용자에게(메시지가 이 기능의 큰 부분을 차지하므로) 더 좋게 만들기 위해 다음 제안들을 고려해 주실 수 있을까요?

사이드바에서 위치 선택 가능

UI에서 메시지를 더 강조하기 위해 사이드바 상단(즉, 링크 바로 아래)에 배치하고 싶습니다. 기본적으로, 사용자가 알림에 의존하지 않고도 각 그룹의 최근 메시지를 한눈에 쉽게 볼 수 있도록 하려는 것입니다.

이를 위해 아래 CSS를 사용했지만, 저에게 도움이 되는 것이 저만은 아닐 것이라 생각합니다:

/* Ensure the Messages section appears first in the flexbox container */
.sidebar-section-wrapper {
  order: 1;
}
.sidebar-section-wrapper[data-section-name="inbox-section"] {
  order: 0;
}

그룹 인박스(group inbox)를 그룹 컨텍스트에서 열기

사용자가 자신의 그룹과 쉽게 상호작용할 수 있기를 바랍니다. 개인 인박스 페이지(예: /my/messages/group/the-group)가 아니라 그룹 페이지(예: /g/the-group/messages/inbox)에서 접근하는 인박스에서 메시지를 다루는 것이 나에게 더 합리적으로 느껴집니다.

이렇게 하면 다른 그룹 멤버와 설정에 쉽게 접근할 수 있는 깔끔한 그룹 중심의 페이지가 제공됩니다:

이것이 TC의 설정 항목으로 관리될 수 있다면 정말 훌륭할 것입니다.

3개의 좋아요

이 점에 대해, 어떤 경로가 더 나은 기본값인지, 그리고 설정을 추가할지에 대해 고민해 본 적이 있습니다. 하지만 지금은 기억이 나지 않는 어떤 이유로 인해 해당 기능을 제거했습니다. 내일 나중에 다시 확인해 보겠습니다. 읽지 않은 메시지 표시기와 관련된 문제였던 것 같습니다. 만약 읽지 않은 메시지 표시기가 사라지는 결과를 감수해야 한다면, 여전히 이 경로를 선호하시겠습니까?

현재 위치는 코어에 있던 메시지 섹션과 동일한 위치입니다.
사이드바의 섹션 순서를 변경하는 데 유용한 컴포넌트가 이미 존재합니다: Navigation (sidebar) menu display control
두 컴포넌트가 모두 순서를 오버라이드하려고 하므로 충돌을 피하기 위해, 다른 순서를 원하는 관리자는 기존 컴포넌트를 사용하는 것이 합리적일 수 있습니다 (저자가 섹션 이름으로 "inbox-section"을 사용하면 작동한다고 확인했습니다).

추가 설정을 제공할 수 있을지 확인해 봐야겠습니다. 어쨌든, 컴포넌트끼리 서로 간섭하는 상황을 피하고 싶습니다.

2개의 좋아요

my fork에서 이것을 직접 테스트해 보았고, 같은 결과를 얻었습니다. 동작은 하지만, 읽지 않은 메시지 표시기와 사이드바의 링크 하이라이팅 기능이 모두 사라집니다. 이 두 가지는 정말로 가치가 높은 기능들이죠!

진행한 내용까지 PR을 올렸습니다:

하지만 정말로 잘 돌아가려면 읽지 않은 메시지 표시기와 링크 하이라이팅 기능이 작동해야 하지 않을까요?

좋은 지적입니다! 그 아이디어가 훨씬 낫네요. 부끄러운 말씀이지만, 저는 바로 그 TC(토픽 컨트롤)의 저자 중 한 명입니다.

1개의 좋아요

왜 route 대신 href를 사용하셨나요? href는 안 읽음 표시와 전혀 작동하지 않는 것 같습니다. userPrivateMessages에서처럼 group.messages.inbox 루트의 숫자를 사용할 수 없는 점이 더 걱정되었습니다.

1개의 좋아요

저는 좀 엉성하게 개발하는 편이라, 여러 가지를 시도하다가 결국 하나를 찾아냈습니다! 아마도 그렇게 똑똑하지 않은 생성형 AI에 너무 의존하는 것도 한몫한 것 같습니다. :wink:

라우트를 활용해보려 했지만, 기존 라우트를 오버라이드하는 데 실패했습니다. 그래서 결국 포기했어요.

링크를 가로채서 다른 위치로 이동시키는 방식으로 해당 숫자나 동작을 구현할 수 있을지 궁금하긴 했습니다. 하지만 저 같은 초보자에게는 좀 복잡하더라고요.

편하게 '개선’해 주세요!

(참고로, 멋진 @moin 님이 정확히 그렇게 하셔서 해당 기능을 추가하고 제대로 동작하게 만들어 주셨습니다!)

3개의 좋아요

실제로 매우 잘 작동합니다. 좀 부끄럽게도, 저는 그 TC의 저자 중 한 명입니다(@lilly에 비해 매우 보조적인 역할입니다) :flushed_face:!

OP에 이 내용이 포함되면 좋겠습니다.

2개의 좋아요

@nathank 님은 사이드바에서 그룹 인박스 순서를 변경할 수 있는 옵션을 요청했습니다. 이전에 Configuring the order of groups in theme component settings 에서 이 문제를 가장 잘 해결하는 방법에 대한 아이디어를 구한 적이 있었는데, 이제 해결책을 찾았다고 생각합니다.

이 기능은 그룹의 짧은 이름 대신 전체 이름을 표시해 달라는 요청과도 결합했습니다. 이 컨텍스트에서 전체 이름을 쉽게 가져올 수 없기 때문에, 대신 관리자가 custom display name(사용자 정의 표시 이름)을 정의할 수 있도록 했습니다. 이전에 설정에서 그룹 이름만 표시하는 데 사용되던 필드가 이제 사이드바에 표시되는 이름도 제어합니다.

두 기능 모두 새로운 advanced_group_inbox_configuration 설정을 통해 처리됩니다.

이 설정에서 다음을 수행할 수 있습니다:

  • 드롭다운에서 그룹 선택
  • 사이드바에 표시될 사용자 정의 이름 선택적으로 정의
  • 하단의 버튼을 사용하여 설정된 그룹 순서 변경

사용자 정의 이름은 설정 내부에서도 유용합니다.
이름이 제공되지 않으면 항목은 group 1, group 2 등으로 표시됩니다(위치 기반). 임시 이름을 추가하면 순서 변경이 쉬워지며, 원한다면 저장 전에 다시 제거할 수 있습니다.

고급 설정에 추가되지 않은 메시지 있는 그룹도 여전히 사이드바에 표시됩니다. 설정된 그룹 뒤에 나열되며 그룹 ID 순서로 정렬됩니다.
hide_group_inboxes 설정에 나열된 그룹은 고급 설정에 포함되었거나 메시지가 있든 관계없이 항상 숨겨집니다.


이 예시에서는 모더레이터 그룹에 사용자 정의 이름이 입력되지 않았기 때문에 설정에서 group 1로 표시됩니다. 다른 그룹들은 사용자 정의 이름을 가지고 있습니다.

이 설정의 결과는 다음과 같습니다:


여기서 'doggo-daily’와 ‘cat_pics’ 인박스가 위치를 바꿨고, 하이픈이나 언더스코어 없이 표시되는 것을 볼 수 있습니다. ‘Team’ 인박스는 고급 설정에서 구성된 것들 아래에 나타납니다.
또한 관리자 전용 경고도 볼 수 있는데, 이는 ‘admin’ 그룹이 고급 설정과 hide_group_inboxes 설정에 동시에 추가되었기 때문에 표시됩니다.

5개의 좋아요

이제는 그룹을 소통에 활용하는 사용자에게 정말 훌륭한 기능이 되었습니다. @Moin님, 수고 많으셨습니다!

다른 분들(그리고 저)의 피드백을 경청하고 적극적으로 반영해 주셨으며, 오랜 기간 이어져 온 문제를 이렇게 우아하게 해결해 주신 잘 설계되고 실용적인 테마 컴포넌트를 만들어 주셔서 감사합니다.

3개의 좋아요

안녕하세요 @Moin, 훌륭한 작업에 감사드립니다.

많은 그룹을 다룰 때 특히 유용한 기능이 이 플러그인의 일부가 될 수 있을지 여쭤봅니다. 모든 그룹 메시지의 통합 보기입니다. 개인 메시지(PN) 보기에서는 메시지가 그룹에도 전송됨을 나타내는 작은 배지가 이미 표시되는데, 메시지가 속한 그룹을 배지로 표시하는 방식으로 모든 메시지를 보여주는 건 어떨까요:

이 기능이 이 테마 컴포넌트에 잘 어울리지 않을 것 같습니다. 이 컴포넌트의 목표는 매우 구체적입니다. 바로 사이드바에 메시지 섹션을 추가하는 것입니다. 완전히 다른 기능을 하나의 컴포넌트에서 지원하는 것은 이해와 유지보수를 어렵게 만들므로 이를 권장하지 않습니다. 이러한 종류의 기능은 별도의 커스터마이징으로 처리하는 것이 더 적절합니다.

더 중요한 점은, 이것이 실제로는 테마 컴포넌트가 잘 처리할 수 있는 성격의 문제가 아니라는 것입니다. 테마 컴포넌트는 프론트엔드에 이미 존재하는 데이터나 기존 백엔드 엔드포인트에서 합리적으로 가져올 수 있는 데이터만 처리할 수 있습니다. 이 컴포넌트가 사이드바에 그룹 인박스를 표시할 수 있는 이유도 바로 이것입니다. Discourse의 많은 부분이 사용자가 속한 그룹을 알아야 하므로, 해당 정보는 이미 손쉽게 이용 가능합니다.

그러나 말씀하신 기능은 모든 그룹 인박스에 걸친 메시지 데이터에 접근해야 합니다. 현재 Discourse는 이러한 데이터를 한 곳에서 통합하여 제공하지 않습니다. 이론적으로 테마 컴포넌트가 각 그룹 인박스를 하나씩 순차적으로 가져올 수는 있지만, 이는 곧 비효율적이 됩니다. 각 요청은 첫 30개의 메시지만 반환하므로, 인박스당 여러 페이지를 로드해야 합니다. 그리고 메시지를 활동 순으로 정렬하려면 사실상 모든 인박스의 모든 메시지를 동시에 가져와야 합니다.

이러한 제한 사항들로 인해, 테마 컴포넌트는 이 용도에 적합하지 않습니다. 이러한 데이터를 반환하는 적절한 백엔드 엔드포인트를 추가하는 플러그인을 사용하는 것이 훨씬 더 합리적이고 확장 가능한 접근 방식입니다.

4개의 좋아요