이름 옆에 사용자 총 게시글 수 표시하는 방법

여러분 안녕하세요, 여기 첫 게시글입니다. Blizzard 포럼에서 사용자 이름 옆에 총 게시글 수가 어떻게 표시되는지 궁금합니다.


저도 아래처럼 Discourse API 시스템을 사용하여 포럼에서 비슷한 기능을 구현해 보았습니다.

하지만 더 나은 방법이 있을 것 같습니다. 또한 사용자 배지 등을 표시할 계획도 있습니다. 이 부분 도와주실 수 있는 분 계신가요? 감사합니다.

템플릿/숏코드 시스템이 있는지 궁금합니다.

안녕하세요!

API를 사용하고 계신다면, 이것이 올바른 방법이라고 생각합니다.

혹시 코드를 공유해 주실 수 있을까요? 필요에 따라 개선 사항을 제안해 드릴 수 있습니다. :slight_smile:

네

<script type="text/discourse-plugin" version="0.1">
  api.onPageChange(() => {
    // ID가 'topic'인 요소가 존재하는지 확인
    if ($('#topic').length > 0) {
      // 'topic' 요소가 존재하면 'data-user-id' 속성을 찾음
      var userId = $('#topic article').data('user-id');

      // 'data-user-id' 속성이 존재하는지 확인
      if (userId !== undefined) {
        // 사용자 정보를 가져오기 위해 API 요청을 수행
        apiReq(`admin/users/${userId}.json`, 'GET')
          .then(data => {
            // 응답 데이터를 처리
            console.log('User post count:', data.post_count);

            // 사용자의 user_fields["1"]에 값이 있는지 확인
            if (data.user_fields && data.user_fields["1"]) {
              // 첫 번째 'names' div 안에 사용자 필드 표시
              displayUserField(data.user_fields["1"]);
            }

            // 첫 번째 'names' div 안에 게시글 수 표시
            displayPostCount(data.post_count);
          })
          .catch(error => {
            // 에러 처리
            console.error('API request error:', error);
          });
      } else {
        console.log('No data-user-id attribute found');
      }
    } else {
      console.log('No element with ID "topic" found');
    }
  });

  // 첫 번째 'names' div 안에 사용자 필드를 표시하는 함수
  function displayUserField(userFieldValue) {
    // 첫 번째 'names' div 찾기
    var firstNamesDiv = $('.names:first');

    // 'user-title' 클래스를 가진 span 요소 생성
    var userFieldSpan = $('<span></span>').addClass('user-title');
    userFieldSpan.text(userFieldValue);

    // span 요소를 첫 번째 'names' div에 추가
    firstNamesDiv.append(userFieldSpan);
  }

  // 첫 번째 'names' div 안에 게시글 수를 표시하는 함수
  function displayPostCount(postCount) {
    // 첫 번째 'names' div 찾기
    var firstNamesDiv = $('.names:first');

    // 'user-title' 클래스를 가진 span 요소 생성
    var postCountSpan = $('<span></span>').addClass('user-title');
    postCountSpan.text(postCount + ' posts');

    // 게시글 수 span 요소를 첫 번째 'names' div에 추가
    firstNamesDiv.append(postCountSpan);
  }

</script>

apiReq 함수는 다른 컴포넌트에 있습니다.

블리즈컨에서 댓글 작성자 옆에 게시글 수를 표시하는 기능을 보여주었는데, 나는 그걸 구현하지 못했습니다.

네, API를 부분적으로 사용하시는군요. 이 코드는 확실히 개선할 수 있습니다. 잠시만 기다려 주시면 다시 말씀드리겠습니다.

좋네요. 저는 Discourse에 처음 오셔서 아는 게 거의 없어요.

결국 플러그인을 만들어야 했습니다.

게시물이나 사용자 카드를 볼 때 post_count 값을 가져오려면, 이 필드를 포함하도록 데이터를 직렬화해야 합니다. 이는 플러그인의 도움 없이는 불가능하며, 사용자별 요청에 의존하는 것은 현실적인 해결책이 아닙니다.

한 번 사용해 보세요. 관심 있으시면 assets 폴더에 JS 부분이 있습니다.
API를 사용할 때 놓치기 쉬운 한 가지 기능은 outlets을 통해 커스터마이즈할 수 있다는 점입니다.

더 많은 옵션이 필요하면 말씀해 주세요.
이 플러그인이 작아서 출시해야 할지 모르겠지만, 어쨌든 공개합니다:

노고에 진심으로 감사드립니다. 시도해 보겠습니다.
실제로 제가 계획했던 기능은 다음과 같습니다.

  1. 아바타 옆에 사용자의 게시글 수와 댓글 수를 표시합니다.
  2. 그룹의 모든 멤버에게 기본 제목(예: Admin)을 지정합니다.
  3. 아바타 옆에 신뢰 수준(Trust Level)을 표시합니다.
  4. 아바타 옆에 배지를 표시합니다.
  5. 아바타 옆에 user_field 값을 표시합니다.
    그리고 옵션은 관리자가 변경할 수 있도록 합니다.
    게시글 수에 하이퍼링크를 걸어서 다른 사용자가 클릭하면 게시글 목록을 볼 수 있도록 하려는 계획도 있었습니다.
    작은 플러그인임에도 불구하고, 공개할 가치가 있다고 생각합니다. 제안된 새로운 기능들을 추가하는 것도 고려해 주시면 좋겠습니다.
    감사합니다.

플러그인을 설치했지만 작동하지 않습니다.

다시 테스트해 봤는데 제 쪽에서는 정상적으로 작동합니다.

플러그인이 활성화되어 있나요?

지금은 잘 작동합니다. 감사합니다.

다시 번거롭게 해서 죄송합니다. 잠시 사용해보니, 토픽이 포함되어 있지 않다는 것을 알게 되었습니다. 제가 아는 바로는 토픽도 일종의 게시글입니다.

생성된 주제는 또 다른 통계 항목입니다. 이 수를 게시글 수에 더할까요, 아니면 "주제: xx, 게시글: yy"처럼 새 텍스트를 추가할까요?

사실 저는 postCount + TopicCount와 같은 값을 얻으려고 하고 있습니다.
단순히 토픽을 게시물로 계산하고 싶은 거예요.
또한 사용자 직함(있다면) 뒤에 이를 표시하려고도 했습니다. 플러그인 코드를 수정해 봤지만(포크한 후) 아직까지 성공하지 못했습니다.

플러그인을 업데이트했습니다. 잘 작동하는지 알려주세요.

정말 감사합니다. 잘 작동했습니다.

정말 멋지네요. 총 반응 수 + FA 아이콘도 추가할 수 있을까요?

편집을 못 해서, 플러그인을 설치해서 테스트해 봤는데, 아주 잘 작동합니다. 다만 모바일에서는 게시글 총 수가 이름 왼쪽에 표시되는 문제가 있네요. :frowning:

@David_Ghost

CSS를 사용하여 수정할 수 있습니다:

.names.trigger-user-card > div:has(.user-post-user__container) {
    order: 2;
}