위젯 설정에서 회원그룹을 지정한 뒤 그걸 받아와서 $target_groups라는 변수에 회원그룹 정보를 받아내는 코드입니다.

하다보니 두 가지 방식이 생각 나서 여쭤봅니다.

하나는 지정된 그룹별로 member 모듈의 함수를 실행하는 것이구요.

다른 하나는 아예 사이트에 존재하는 모든 회원그룹을 가져와서 위젯 설정에 포함되지 않은 그룹은 걸러내는 방식입니다.

 

1. 지정된 그룹별로 member 모듈의 함수를 실행해서 회원그룹 정보를 담기

$target_groups = array();
$oMemberModel = getModel('member');
$_groups = explode(',', $args->target_group);

if ( count($_groups) )
{
    for ( $i = 0; $i < count($_groups); $i++ )
    {
        $group_srl = trim($_groups[$i]);
        if ( !$group_srl ) continue;
        $target_groups[$group_srl] = $oMemberModel->getGroup($group_srl);
    }
}
else
{
    $target_groups = $oMemberModel->getGroups(0);
    if ( !$target_groups ) return;
}

 

2, 모든 회원그룹을 가져온 뒤, 지정되지 않은 회원그룹은 걸러내기

$oMemberModel = getModel('member');
$target_groups = $oMemberModel->getGroups(0);

if ( count($args->target_group) )
{
    for ( $i = 0; $i < count($args->target_group); $i++ )
    {
        if ( !in_array($i, $args->target_group) )
        {
            unset($target_groups[$i]);
        }
    }
}

 

 

... 어느 것이 더 효율적일지 판단이 잘 안 섭니다;;;

  • Lv15
    저는 얼핏 1번?
  • Lv15
    셜멍들을땡 1인데 코드는 2가 간단하군요
  • Lv15 Lv19
    셜멍 들으셔서 그래요ㅋㅋㅋㅋ
    역시 쿼리 요청이 덜 들어가는 게 좋은가봐요 :)
  • Lv36

    2번이 훨씬 더 효율적입니다. 루프 밖에 있는 함수는 딱 한 번 실행될 뿐이지만
    루프 안에 있는 함수는 수십 번 실행될 수도 있다는 점을 기억하면 쉽습니다.
    게다가 getGroup()과 달리 getGroups(0)은 캐시 처리까지 되어서 사실상의 쿼리 수는 0회입니다.

    그러나 for문을 사용하는 방식은 양쪽 모두 별로인 것 같네요.
    루프를 돌 때마다 count()를 하게 되는 것은 물론,
    저렇게 배열 키와 값을 모두 참조해야 하는 경우 foreach가 훨씬 직관적입니다.
    for문으로 $i를 돌리면서 배열[$i]를 사용한다면 99%는 foreach로 대체 가능합니다.

    배열 키가 연속된 숫자가 아니더라도 정상 작동한다는 장점도 있고요.

  • Lv36 Lv19
    오 감사합니다.
    2번 방식에 foreach로 돌려야겠네요.
    역시 쿼리 요청을 덜하는 게 포인트군요. 그리고 캐시!