어제 스쿄님이 회원정보 페이지(member_info.html)에서 간단한 현황을 표기하고 싶다 하셨는데,
https://xetown.com/questions/1386519
제가 왜 이러는지는 모르겠지만 갑자기 자극을 받아서 xml 쿼리랑 코드를 짜봤습니다.
목차 |
---|
|
0. 이 팁이 활용될 수 있는 곳 ⇪ 목차
- 이 팁은 사이트 전역에 걸친 회원 개인의 활동 현황을 나타내는 데 활용될 수 있습니다.
- 구체적으로 다음과 같은 경우에 해당합니다.
- 회원이 작성한 총 게시글수 또는 댓글수
- 회원이 다른 게시글이나 댓글에 시도했던 추천 횟수, 비추천 횟수, 신고 횟수
- 회원이 작성한 게시글이나 댓글 중 추천, 비추천, 신고 등을 받았던 게시글 또는 댓글의 개수
- 회원이 작성한 게시글이나 댓글이 받았던 추천, 비추천, 신고 등의 총 횟수
- 아마도 다음과 같은 상황에서 활용될 수 있을 것입니다.
- 회원정보 보기 페이지에서 자신 또는 다른 회원의 현황을 나타내고 싶을 경우 : 예. https://xetown.com/index.php?mid=tips&act=dispMemberInfo&member_srl=38796 (스샷은 없어요ㅜ 그냥 이런 화면 안에 디스플레이한다는 뜻)
- 게시글 본문 페이지에서 게시글 작성자의 현황을 나타내고 싶을 경우 : 예. https://xetown.com/tips/1386849#comment_1386906 (웹지기님 스샷 감사해요~)
- 또... 레이아웃 회원 현황 부분에 넣거나 위젯으로도 제작이 가능할 것 같은데, 제작자분들이라면 이 정도 팁은 얼마든지 활용하실 수 있겠지요 :)
1. 쿼리 XML 파일 저장하기 ⇪ 목차
- 먼저 이곳 게시물에 첨부한 압축파일 queries.zip을 다운로드합니다. queries.zip
- 압축을 풀고 queries라는 이름 그대로 스킨 폴더의 하위폴더로 넣습니다.
- [회원정보 보기라면] ./modules/member/skins/{사용중인 스킨 이름}/queries
- [게시글 작성자 현황 보기라면] ./modules/board/skins/{사용중인 스킨 이름}/queries
- 라는 폴더로 모두 12개의 xml 파일을 저장하는 겁니다.
2. 회원번호와 쿼리 파일 경로 지정 ⇪ 목차
- 이번에는 위에서 언급한 두 가지 경우의 수에 따라 살짝 다른데요
- [회원정보 보기 페이지의 경우] ./modules/member/skins/{사용중인 스킨 이름}/member_info.html 상단(또는 적당한 곳)에 다음의 코드를 삽입합니다.
{@ $_member_srl = $memberInfo['member_srl']; $query_path = 'member/skins/' . $member_config->skin; }
- [게시판 본문 페이지의 경우] ./modules/board/skins/{사용중인 스킨 이름}/_read.html 상단(또는 적당한 곳)에 다음의 코드를 삽입합니다.
{@ $_member_srl = $oDocument->get('member_srl'); $query_path = 'board/skins/' . $module_info->skin; }
- 여기서 지정한 기본 변수를 가지고 게시글수, 댓글수, 추천/비추천/신고의 개수와 횟수 등을 불러오게 됩니다.
3. 필요한 변수 만들기 ⇪ 목차
- 이상과 같이 준비가 되면 위에서 지정한 회원번호($_member_srl)와 쿼리 xml 파일을 통해 필요한 변수를 만들 수 있습니다.
- 아래와 같은 구문을 위의 2번에서 삽입한 코드 바로 아래에 삽입합니다.
1) 작성 글수와 댓글수 가져오기
{@ // 해당 회원이 작성한 게시글수 $total_document_count = getModel('document')->getDocumentCountByMemberSrl($_member_srl); // 해당 회원이 작성한 댓글수 $total_comment_count = getModel('comment')->getCommentCountByMemberSrl($_member_srl); }
- 이렇게 해서 총 작성 글수와 댓글수를 가져올 수 있습니다.
2) 여타 활동 내역 현황을 뽑아내기 위한 객체 생성
{@ $args = new stdClass; $args->member_srl = $_member_srl; }
- 이후의 변수들을 만들고 가져오려면 $args라는 인수? 매개변수?가 반드시 필요합니다.
- 아래의 3)부터 나오는 변수들을 만드시려면 반드시 잊지 말고 꼭 적어주셔야 합니다.
3) 회원이 실행한 추천, 비추천, 신고의 횟수
{@ // 해당 회원이 추천한 문서의 개수 = 문서에 대한 추천 횟수 $output = executeQuery($query_path . '.getVotingCountByMemberSrlInDocument', $args); $voting_document_count = ( !$output->toBool() || !$voting_document_count ) ? 0 : $output->data->count; // 해당 회원이 추천한 댓글의 개수 = 댓글에 대한 추천 횟수 $output = executeQuery($query_path . '.getVotingCountByMemberSrlInComment', $args); $voting_comment_count = ( !$output->toBool() || !$voting_comment_count ) ? 0 : $output->data->count; // 해당 회원이 비추천한 문서의 개수 = 문서에 대한 비추천 횟수 $output = executeQuery($query_path . '.getBlamingCountByMemberSrlInDocument', $args); $blaming_document_count = ( !$output->toBool() || !$blaming_document_count ) ? 0 : $output->data->count; // 해당 회원이 비추천한 댓글의 개수 = 댓글에 대한 비추천 횟수 $output = executeQuery($query_path . '.getBlamingCountByMemberSrlInComment', $args); $blaming_comment_count = ( !$output->toBool() || !$blaming_comment_count ) ? 0 : $output->data->count; // 해당 회원이 신고한 문서의 개수 = 문서에 대한 신고 횟수 $output = executeQuery($query_path . '.getAccusingCountByMemberSrlInDocument', $args); $accusing_document_count = ( !$output->toBool() || !$accusing_document_count ) ? 0 : $output->data->count; // 해당 회원이 신고한 댓글의 개수 = 댓글에 대한 신고 횟수 $output = executeQuery($query_path . '.getAccusingCountByMemberSrlInComment', $args); $accusing_comment_count = ( !$output->toBool() || !$accusing_comment_count ) ? 0 : $output->data->count; }
- 이렇게 해서 해당 회원이 다른 사용자가 작성한 게시글 또는 댓글에 취한 추천, 비추천, 신고의 건수를 가져올 수 있습니다.
- $output으로 시작하는 쿼리실행문과 그에 대응하는 각 변수들이 짝을 이루고 있음에 주의하셔야 합니다.
- 자, 다음부터는 이게 말이야? 막걸리야? 싶은 언어의 향연이 시작되니 주의하셔야 해요. 집중집중.
4) 회원이 추천받은 글수 및 그 글들이 추천받은 횟수
{@ $output = executeQuery($query_path . '.getVotedCountForMemberSrlInDocument', $args); // 해당 회원이 작성한 게시글 중 추천받은 게시글수 $voted_document_count = ( !$output->toBool() || !$voted_document_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 게시글들이 추천받은 횟수 $voted_document_sum = ( !$output->toBool() || !$voted_document_sum ) ? 0 : intval($output->data->sum); }
- 추천받은 게시글수($voted_document_count)는 회원이 작성한 글들 중에서 추천받은 글의 개수입니다.
- 게시글들이 추천받은 횟수($voted_document_sum)는 회원이 작성한 글들이 추천받은 건수의 총합입니다. 따라서 한 문서 안에서 추천을 2회 이상 받은 적이 있다면, $voted_document_count보다 $voted_document_sum이 더 클 수밖에 없습니다.
- 아래에 나오는 5) ~ 9) 역시 같은 형식으로 이뤄졌으니 지금 설명을 잘 염두에 두시면 되겠습니다.
5) 회원이 추천받은 댓글수와 그 댓글들이 추천받은 횟수
{@ $output = executeQuery($query_path . '.getVotedCountForMemberSrlInComment', $args); // 해당 회원이 작성한 댓글 중 추천받은 댓글수 $voted_comment_count = ( !$output->toBool() || !$voted_comment_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 댓글들이 추천받은 횟수 $voted_comment_sum = ( !$output->toBool() || !$voted_comment_sum ) ? 0 : intval($output->data->sum); }
6) 회원이 비추천받은 글수 및 그 글들이 비추천받은 횟수
{@ $output = executeQuery($query_path . '.getBlamedCountForMemberSrlInDocument', $args); // 해당 회원이 작성한 게시글 중 비추천받은 게시글수 $blamed_document_count = ( !$output->toBool() || !$blamed_document_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 게시글들이 비추천받은 횟수 $blamed_document_sum = ( !$output->toBool() || !$blamed_document_sum ) ? 0 : intval($output->data->sum); }
7) 회원이 비추천받은 댓글수와 그 댓글들이 비추천받은 횟수
{@ $output = executeQuery($query_path . '.getBlamedCountForMemberSrlInComment', $args); // 해당 회원이 작성한 댓글 중 비추천받은 댓글수 $blamed_comment_count = ( !$output->toBool() || !$blamed_comment_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 댓글들이 비추천받은 횟수 $blamed_comment_sum = ( !$output->toBool() || !$blamed_comment_sum ) ? 0 : intval($output->data->sum); }
8) 회원이 신고당한 글수 및 그 글들이 신고당한 횟수
{@ $output = executeQuery($query_path . '.getAccusedCountForMemberSrlInDocument', $args); // 해당 회원이 작성한 게시글 중 신고당한 게시글수 $accused_document_count = ( !$output->toBool() || !$accused_document_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 게시글들이 신고당한 횟수 $accused_document_sum = ( !$output->toBool() || !$accused_document_sum ) ? 0 : intval($output->data->sum); }
9) 회원이 신고당한 댓글수와 그 댓글들이 신고당한 횟수
{@ $output = executeQuery($query_path . '.getAccusedCountForMemberSrlInComment', $args); // 해당 회원이 작성한 댓글 중 신고당한 댓글수 $accused_comment_count = ( !$output->toBool() || !$accused_comment_count ) ? 0 : $output->data->count; // 해당 회원이 작성한 댓글들이 신고당한 횟수 $accused_comment_sum = ( !$output->toBool() || !$accused_comment_sum ) ? 0 : intval($output->data->sum); }
4. 유의사항 ⇪ 목차
- 물론 이 모든 변수를 다 활용하실 일은 아마 없을 겁니다. 그때그때 필요한 경우에만 꺼내서 활용하시면 되니까요.
- 다만, 이때 주의사항이 있습니다.
- 전체 게시글수($total_document_count)와 전체 댓글수($total_comment_count)의 경우에는 변수 그대로 사용해도 무방하지만,
- 그외의 변수들을 생성하실 때는 위에서 하이라이트됐던 2행과 3행을 반드시 먼저 써주셔야 합니다. 이 부분이죠.
$args = new stdClass; $args->member_srl = $_member_srl;
- 이 부분만 유의하신다면 사용하지 않을 변수들은 $output~~~ 로 시작하는 문단 단위로 삭제해서 적용하시는 걸 권장합니다.
- 만약 필요하지 않은 변수들을 그대로 방치한다면, 변수 생성을 위해 그만큼 db가 고생을 해야 하니까요.
- 즉, 위에서 4) ~ 9)에서 생성되는 변수들은 각각의 바로 앞에 있는 $output = executeQuery($query_path ~~~~); 에 포함된 쿼리들로부터 생성되는 변수입니다.
- 따라서 4) ~ 9) 각 항목들에서 두 변수 중에 하나만 사용한다 하더라도 같이 묶여 있는 $output = executeQuery($query_path . '.get~~~~~', $args); 이 부분은 반드시 존재해야 합니다.
- 하지만 만약 각 항목의 두 변수 모두 사용하지 않는다면 $output = ~~~ 부분은 아예 필요가 없기도 합니다.
-> 이하의 변수들 모두 같은 형식으로 생성되기 때문에 반드시
5. 각 변수에 대한 설명 ⇪ 목차
- 이제 각 변수들을 해당하는 html 페이지에서 초콜릿처럼 꺼내먹으면 됩니다.
- 가령,
- 회원정보 페이지에서 해당 회원의 전체 게시글수를 출력하고 싶다면,
작성한 문서수 : {$total_document_count} - 게시판 본문에서 게시글 작성자가 작성했던 댓글들이 여태껏 받았던 추천의 총 횟수를 출력하고 싶다면,
총 추천 수 : {$voted_comment_sum}
... 이라고 하면 되는 거죠.
- 이상의 변수들에 대해 다시 한번 정리해보겠습니다.
$total_document_count |
해당 회원이 작성한 게시글수 |
---|---|
$total_comment_count |
해당 회원이 작성한 댓글수 |
$voting_document_count |
해당 회원이 추천한 게시글수 |
---|---|
$voting_comment_count | 해당 회원이 추천한 댓글수 |
$blaming_document_count |
해당 회원이 비추천한 게시글수 |
$blaming_comment_count | 해당 회원이 비추천한 댓글수 |
$accusing_document_count |
해당 회원이 신고한 게시글수 |
$accusing_comment_count | 해당 회원이 신고한 댓글수 |
$voted_document_count |
해당 회원이 추천받은 게시글 개수 |
---|---|
$voted_document_sum |
해당 회원의 게시글들이 추천받은 횟수 |
$voted_comment_count |
해당 회원이 추천받은 댓글 개수 |
$voted_comment_sum |
해당 회원의 댓글들이 추천받은 횟수 |
$blamed_document_count |
해당 회원이 비추천받은 게시글 개수 |
---|---|
$blamed_document_sum |
해당 회원의 게시글들이 비추천받은 횟수 |
$blamed_comment_count |
해당 회원이 비추천받은 댓글 개수 |
$blamed_comment_sum |
해당 회원의 댓글들이 비추천받은 횟수 |
$accused_document_count |
해당 회원이 신고당한 게시글 개수 |
---|---|
$accused_document_sum |
해당 회원의 게시글들이 신고당한 횟수 |
$accused_comment_count |
해당 회원이 신고당한 댓글 개수 |
$accused_comment_sum |
해당 회원의 댓글들이 신고당한 횟수 |
- 이상입니다. ... 끝~!