사용자 지정 필터 홈페이지 만들기

이런 동적 홈페이를 만들 수 있을까요?

  • 최근 활동이 있는 주제 10개 (이번 주)
  • 최신 생성된 주제 5개 (오늘)
  • 최근 주제 5개 (이번 주)
  • 답글이 가장 많은 주제 5개 (이번 주)
  • '좋아요’가 가장 많은 주제 5개 (이번 주)
  • 최신 생성된 주제 5개 (어제 또는 오늘)

Discourse Filtered Topics List를 통해 이러한 홈페이를 만들 수 있는 테마 컴포넌트가 있지만, 단점이 있다면 특정 시간 프레임에서만 작동한다는 것입니다. 그래서 매일 시간 프레임을 변경해야 합니다.

즉, 현재는 다음과 같이 날짜를 추가할 수 있는 방식으로 작동합니다:

activity-before:YYYY-MM-DD 지정된 날짜보다 이전의 최신 활동(bump)이 있는 주제
activity-after:YYYY-MM-DD 지정된 날짜보다 이후의 최신 활동(bump)이 있는 주제
created-before: YYYY-MM-DD 지정된 날짜보다 이전에 생성된 주제
created-after:YYYY-MM-DD 지정된 날짜보다 이후에 생성된 주제

하지만 이렇게 하면 항상 날짜를 변경해야 합니다. 포럼에서 이 문제를 해결할 수 있는 대안이 있을까요?

또한, 이 컴포넌트의 주요 문제는 모든 정렬 방식에서 주제가 반복된다는 것입니다.

귀하의 사례에서 이것이 문자 그대로 가장 많은 답변/좋아요를 의미해야 하나요? /top 주제 목록을 사용하면 자동 시간 범위를 설정할 수 있습니다… top은 조회수, 좋아요 수 및 게시글 수를 반영합니다(사이트 설정에서 이러한 가중치를 약간 조정할 수 있습니다)

맞습니다. 이는 여러 주제 목록을 소스로 가져오는 것의 복잡성입니다. 컴포넌트는 각 목록을 교차 참조하고 중복을 제거해야 합니다. 매우 복잡한 작업은 아니지만, 현재 사용 가능한 컴포넌트 중 하나에도 이 기능이 구현되어 있지 않다고 생각합니다.

답글이나 좋아요에 완전히 의존하는 것은 아니지만, 네, 동적으로 보이는 홈페이지를 만들려고 하고 있습니다.

그러면, 필드 중 하나에서 중복된 주제를 제거할 수 있는 컴포넌트 하나면 되는 건가요?

네, @gormus 님이 관심 있으시다면 Filtered Topic Lists 에 “중복 항목 숨기기” 기능을 추가하는 것은 그리 복잡하지 않을 것입니다. findFilteredTopics 액션을 수정하여 모든 토픽 ID를 리스트에 저장한 뒤, 중복을 필터링해 내는 방식으로 구현할 수 있습니다.

다만, 10개의 토픽 목록을 원했는데 중복이 제거된 후 5개만 남을 수도 있다는 단점이 있습니다. 설정에서 지정한 수보다 몇 개 더 가져오는 방식으로 이 문제를 부분적으로 완화할 수 있을 것입니다.

이전에도 여러 프로젝트의 홈페이지에 필터링된 목록을 추가한 경험이 있습니다. 겹치는 필터를 가진 여러 개의 “최근” 목록을 채우려면, 처음부터 매우 활발한 커뮤니티가 있어야 한다는 점을 경고하고 싶습니다. 커뮤니티가 그만큼 활발하다면, 동적인 홈페이지를 구축할 때 활용할 수 있는 콘텐츠도 훨씬 풍부해집니다. 그런 경우, 서로 다른 목록으로 구성된 블록은 오히려 정적인 느낌을 주고 시각적으로 덜 매력적으로 보일 수 있습니다.

다만, 조금 다른 관점에서 접근한다면 수동 시간 필터가 적용된 하나 또는 두 개의 목록만 사용하는 것도 고려해 볼 수 있습니다. 이는 사용자에게 오히려 더 동적인 느낌을 줄 수 있습니다. 아래와 같은 뷰를 생각해 보세요:

이 기능은 Central 테마에서 가져온 것이며, 블록 컴포넌트 형태로 여기에서 사용할 수 있습니다: Manuel Kostka / Discourse / Blocks / Top Topics · GitLab

맞아요, 이렇게 하면 될 수도 있지만, 실제로는 페이지에 여러 필터를 설정하고 싶었습니다.

네, 실제로 그렇게 하면 됩니다. @gormus 님이 관심 있으시면 :))

오늘 이 문제를 조금이라도 해결해 줄 업데이트를 적용했습니다: FEATURE: allow date-based filters to accept a day count - Pull Request #33197 - discourse/discourse - GitHub (다음에 Discourse를 업데이트하면 적용됩니다)

이제 activity/created-before/after 필터에 원하는 일 수를 입력할 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다:

activity-after:7 지난 7일 동안 활동이 있었던 주제
created-after:1 1일 전에 생성된 주제

오늘(자정 이후)을 의미하려면 0을 사용할 수도 있습니다

야, 빠르다. 고마워!!

안녕하세요 @awesomerobot, 필요한 수정을 완료했고 이제 완벽하게 작동하고 있습니다. 감사합니다 :))