그룹별 회원정보 출력
https://xetown.com/41182 과 https://xetown.com/250702 에 달았던 댓글을 모아서 사용팁으로 끌어올려봅니다.
때때로 회원그룹에 기반해 상세 정보를 보여줘야 할 때가 있는데요. 이를테면 웹진 형식 사이트에서 주요 필진의 글을 모아본다거나, 커뮤니티 사이트에서 그룹별로 관련 정보를 보여줄 때가 있을 수 있죠.
하지만 XE에서는 기본적으로 회원그룹에 관한 정보를 로그인된 사용자 정보로부터 가져오기 때문에, 약간의 제약이 있습니다. 물론 위젯 중에 그룹별 회원 출력이라는 게 있어서 도움을 받을 수도 있지만, 디자인이라든가 여러 측면에서 커스터마이징에 제약이 있는 것도 사실입니다.
그래서 소소하게나마 그룹에 따라 회원정보를 일람/출력해볼 수 팁을 만들어봅니다.
1. 먼저, 회원들을 그룹별로 불러올 수 변수($result)를 만들어줍니다.
{@
$oDB = &DB::getInstance();
$query = $oDB->_query('select * from xe_member inner join xe_member_group_member on xe_member.member_srl = xe_member_group_member.member_srl');
$result = $oDB->_fetch($query);
}
1-1. 이 경우 다음과 같이 전체회원들에 관한 변수들을 불러올 수 있겠네요.
member_srl user_id email_address password email_host user_name nick_name homepage blog birthday allow_mailing allow_message denied limit_date regdate last_login is_admin description extra_vars change_password_date find_account_question find_account_answer list_order group_srl site_srl
2. 그리고 회원그룹 자체에 대한 정보를 불러올 수 있는 변수($group_list)도 선언해줍니다.
{@
$oMemberModel = getModel('member');
$group_list = $oMemberModel->getGroups($module_info->site_srl);
}
2-2. 이 경우엔 회원그룹별로 다음과 같은 변수들을 활용하는 게 가능해집니다.
title regdate is_default is_admin description site_srl image_mark list_order
3. 이제, 응용을 해보겠습니다. 먼저 $result를 통해 특정 그룹에 속해 있는 회원들을 불러올 수 있습니다. 게시판 소스 파일 적당한 곳에 아래와 같은 소스를 응용하면 (해당 게시판 내에서) 3번 그룹에 속한 회원별로 게시물을 보는 게 가능해질 겁니다.
<block loop="$result=>$key,$val">
<!--@if($val->group_srl==3)--> <!-- // 여기서 숫자 3은 그룹 고유 번호를 가리킴 -->
<a href="{getUrl('search_target','nick_name','search_keyword',$val->nick_name,'page','','document_srl','')}">{$val->nick_name}</a><br />
<!--@end-->
</block>
4. 이번에는 그룹별 이름과 각 그룹에 속한 회원들의 숫자를 확인해보겠습니다. 이렇게 하면 사이트 내의 모든 회원 그룹은 물론, 소속 회원들 숫자를 일별해볼 수가 있습니다.
<block loop="$group_list=>$group_srl,$group_info">
<strong>{$group_info->title}</strong> 그룹에서 <block loop="$result=>$key,$val" cond="$val->group_srl==$group_srl">{@ $count++;}</block>{$count}명의 회원이 활동하고 있습니다.{@ $count=0;}<br />
</block>
5. 위의 소스를 응용해 특정그룹에서만 그룹 이름과 회원 수를 가져올 수도 있습니다. 이렇게 됩니다.
<block loop="$group_list=>$group_srl,$group_info">
<!--@if($group_srl==3)--> <!--// 여기서 숫자 3은 출력하고자 하는 그룹의 고유 번호를 가리킴 -->
<strong>{$group_info->title}</strong> 그룹에서 <block loop="$result=>$key,$val" cond="$val->group_srl==$group_srl">{@ $count++;}</block>{$count}명의 회원이 활동하고 있습니다.
<!--@end-->
</block>
글을 어떻게 마무리해야 될지 모르겠는데요;;; 아무튼 이 외에도 필요에 따라 이런저런 활용도가 있지 않을까 싶습니다.

댓글 7
윤삼님 언제나 좋은 팁 정말 감사합니다!!!
ps.라이믹스에서는 그대로 해보니 안나오길래 xe_member 를 rx_로 바꾸니 잘되네요~^^
접두어 rx_는 1번 항목 전체에 적용해야 합니다.
$query = $oDB->_query('select * from rx_member inner join rx_member_group_member on rx_member.member_srl = rx_member_group_member.member_srl');
2번도 더 간략화하면,
$group_list = $oMemberModel->getGroups(0);
으로 하면 됩니다.
그리고 3번은 이렇게 바꾸는 게 좋겠네요. 특히 라이믹스에서는요.
<block loop="$result=>$key,$val" cond="$val->group_srl==3"><!-- // 여기서 숫자 3은 그룹 고유 번호를 가리킴 -->
<a href="{getUrl('member_srl',$val->member_srl,'page','','document_srl','')}">{$val->nick_name}</a><br />
</block>
4번과 5번은 굉장히 비효율적인 코드입니다. 사용하지 않으시는 걸 권장합니다ㅡㅜ
그룹이름과 회원의 총 포인트 합을 구하는건 혹 불가능할까요 ?^^
100명정도 있더라도 좀 위험한데.. 1000명 ~2000명 이면 페이지로딩 3초 이상 넘어가는 위험군에 속하는 작업입니다.
매번 변경시 기록해주는 모듈을 만들지 않는다면 해당 기능을 날코딩으로 도입하는건 위험합니다.