https://xetown.com/41182https://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>

 

글을 어떻게 마무리해야 될지 모르겠는데요;;; 아무튼 이 외에도 필요에 따라 이런저런 활용도가 있지 않을까 싶습니다.

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • ?
    오,. 이런 좋은팁에 댓글이 없었군요~
    윤삼님 언제나 좋은 팁 정말 감사합니다!!!
    ps.라이믹스에서는 그대로 해보니 안나오길래 xe_member 를 rx_로 바꾸니 잘되네요~^^
  • ? profile
    네, 이때만 해도 라이믹스 유저가 아니었거든요ㅎㅎ
  • profile
    아직 되는거 맞나요? 출력이 안되네요 차도남님의 xe_member -> rx_member 로 바꿨는데도 출력이 안되네요
  • profile profile
    아, 또 흑역사ㅋㅋㅋ

    접두어 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번은 굉장히 비효율적인 코드입니다. 사용하지 않으시는 걸 권장합니다ㅡㅜ
  • profile profile
    ㅎㅎ 요즘 이것저것 해보고 있는데 재미있는 것들이 많네요^^
  • profile
    그룹이름과 회원수 부분을 ...
    그룹이름과 회원의 총 포인트 합을 구하는건 혹 불가능할까요 ?^^
  • profile profile
    가능은 한데 성능상 안좋습니다.

    100명정도 있더라도 좀 위험한데.. 1000명 ~2000명 이면 페이지로딩 3초 이상 넘어가는 위험군에 속하는 작업입니다.

    매번 변경시 기록해주는 모듈을 만들지 않는다면 해당 기능을 날코딩으로 도입하는건 위험합니다.