여러분 안녕하세요, 여기 첫 게시글입니다. Blizzard 포럼에서 사용자 이름 옆에 총 게시글 수가 어떻게 표시되는지 궁금합니다.
저도 아래처럼 Discourse API 시스템을 사용하여 포럼에서 비슷한 기능을 구현해 보았습니다.
하지만 더 나은 방법이 있을 것 같습니다. 또한 사용자 배지 등을 표시할 계획도 있습니다. 이 부분 도와주실 수 있는 분 계신가요? 감사합니다.
여러분 안녕하세요, 여기 첫 게시글입니다. Blizzard 포럼에서 사용자 이름 옆에 총 게시글 수가 어떻게 표시되는지 궁금합니다.
템플릿/숏코드 시스템이 있는지 궁금합니다.
안녕하세요!
API를 사용하고 계신다면, 이것이 올바른 방법이라고 생각합니다.
혹시 코드를 공유해 주실 수 있을까요? 필요에 따라 개선 사항을 제안해 드릴 수 있습니다. ![]()
네
<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을 통해 커스터마이즈할 수 있다는 점입니다.
더 많은 옵션이 필요하면 말씀해 주세요.
이 플러그인이 작아서 출시해야 할지 모르겠지만, 어쨌든 공개합니다:
노고에 진심으로 감사드립니다. 시도해 보겠습니다.
실제로 제가 계획했던 기능은 다음과 같습니다.
플러그인을 설치했지만 작동하지 않습니다.
지금은 잘 작동합니다. 감사합니다.
다시 번거롭게 해서 죄송합니다. 잠시 사용해보니, 토픽이 포함되어 있지 않다는 것을 알게 되었습니다. 제가 아는 바로는 토픽도 일종의 게시글입니다.
생성된 주제는 또 다른 통계 항목입니다. 이 수를 게시글 수에 더할까요, 아니면 "주제: xx, 게시글: yy"처럼 새 텍스트를 추가할까요?
사실 저는 postCount + TopicCount와 같은 값을 얻으려고 하고 있습니다.
단순히 토픽을 게시물로 계산하고 싶은 거예요.
또한 사용자 직함(있다면) 뒤에 이를 표시하려고도 했습니다. 플러그인 코드를 수정해 봤지만(포크한 후) 아직까지 성공하지 못했습니다.
플러그인을 업데이트했습니다. 잘 작동하는지 알려주세요.
정말 감사합니다. 잘 작동했습니다.
정말 멋지네요. 총 반응 수 + FA 아이콘도 추가할 수 있을까요?
편집을 못 해서, 플러그인을 설치해서 테스트해 봤는데, 아주 잘 작동합니다. 다만 모바일에서는 게시글 총 수가 이름 왼쪽에 표시되는 문제가 있네요. ![]()
CSS를 사용하여 수정할 수 있습니다:
.names.trigger-user-card > div:has(.user-post-user__container) {
order: 2;
}