시스템에 존재하는 카테고리가 `categories.json`에 표시되지 않음 (커스텀 테마)

JavaScript를 사용하여 특정 카테고리가 홈페이지에 표시되도록 커스텀 Discourse 테마를 개발했습니다. 이 스크립트는 미리 정의된 카테고리 이름 목록(쉼표로 구분된 배열)을 사용하여 /categories.json에서 콘텐츠를 가져와 렌더링합니다.

대부분의 카테고리는 정상적으로 표시되지만, 스크립트에 명시적으로 나열되어 있고 시스템에 유효한 카테고리 ID로 존재하는 일부 카테고리가 홈페이지에서 누락되고 있습니다.

/categories.json 응답을 검사해 보니, 해당 특정 카테고리들이 API 출력에 전혀 포함되어 있지 않다는 것을 확인했습니다. 그러나 이 카테고리들은 다음과 같은 조건을 충족합니다:

  • Discourse 인스턴스에 존재합니다.
  • 최상위(top-level) 카테고리입니다.
  • everyone 그룹에 최소한 “See” 권한이 설정되어 있습니다.
  • 아카이브, 숨김, 또는 중첩되지 않은 상태입니다.

다음에 대해 이해하고자 합니다:

  1. Discourse가 어떤 조건에서 categories.json에서 카테고리를 제외합니까?
  2. 특히 커스텀 코드를 통해 홈페이지에 표시하려는 경우, 필요한 모든 카테고리가 해당 응답에 나타나도록 어떻게 보장할 수 있습니까?

관련된 통찰력이나 권장되는 해결책이 있다면 알려주시면 감사하겠습니다.

확실하지는 않지만, 이 기능이 /latest에 있나요? 토픽 목록에 토픽이 있는 카테고리만 포함되는 걸까요?

최신 버전의 Discourse를 사용하고 있으며, 아직 어떤 주제도 없습니다… 카테고리 ID를 기반으로 보이지 않는 카테고리 중 하나에 더미 주제를 하나 만들어 보았지만, 카테고리가 JSON으로 나열되도록 트리거될 것이라 기대했지만 효과가 없었습니다. 그래서 더미 주제도 삭제했습니다. 현재 두 카테고리 모두 주제 개수가 0입니다…

내 말이 맞는 것 같군. 장애 발생 시점에 사용되지 않는 카테고리들을 최신 목록에서 대량으로 보내는 것은 무의미할 거야. 나는 원하는 카테고리를 하드코딩하거나 테마 설정에 추가하는 방식을 추천해.

Ajax 호출을 사용하는 것도 가능하지만, 그렇게 하면 처리 속도가 느려질 수 있어.

참고로, 빈 카테고리를 하나 생성해 보았는데 /categories.json에서 확인됩니다.

맞아요. 그 엔드포인트를 가져오면 categories가 하나 있을 거라고 생각해요. 하지만 /latest에 포함된 categories는 아마도 해당 주제에 필요한 것들만 들어 있을 겁니다.

아마도 내가 혼동한 것 같습니다. :melting_face: /categories.json에 특정 카테고리가 이유 없이 포함되지 않는 줄 알고, 아무 주제도 없는 카테고리가 원인인지는 아닌지 확인해 보려 했어요.

나 좀 신경 쓰지 마세요… :slight_smile:

내가 혼란스러웠다는 것이 명확하지 않습니다. 그리고 우리 둘 다 맞을 수도 있습니다. 여전히 OP가 무엇을 보고 있었는지 명확하지 않습니다.

Pfaffman, JammyDodger님 감사합니다. 커스텀 테마를 사용 중이라, 기존에 숨겨져 있던 몇 가지 카테고리를 홈페이지에 표시하기 위해 JavaScript에서 노출된 카테고리 목록에 해당 카테고리를 추가하는 방식으로 시도했습니다. 이 방법으로 이미 5개 카테고리가 정상적으로 표시되고 있습니다. 하지만 이 두 개의 추가 카테고리를 넣어도 홈페이지에 나타나지 않습니다. 문제를 해결하려고 해당 카테고리 중 하나에 주제를 게시해 보았지만, 아무런 효과가 없었습니다.

코드를 공유해 주시면 좋겠어요. GitHub 링크를 달아도 좋습니다.

레이지 로드를 활성화하니 이전에 보이지 않던 카테고리가 표시되도록 문제가 해결되었습니다. 어떻게 관련이 있는지 정확히 알 수 없지만, 이는 카테고리에 권한 문제가 없다는 것을 의미합니다. 여전히 이 문제를 해결하기 위한 근본 원인을 찾지는 못했습니다.

저는 그 지연 로딩 코드가 전송할 필요가 없다고 판단하는 카테고리를 보내지 않도록 설계된 것 같습니다. 모든 카테고리를 보내고 싶다고 설득하는 방법을 정확히 모르겠습니다.