Q&A

효율적인 코드 조언 좀 부탁드립니다

2020.04.04 09:54
539
0
CMS/프레임워크 Rhymix 1.9
개발 언어 PHP 7.0

막상 올려놓고보니 별로 인기는 없는데요ㅋ

https://xetown.com/point_contents/1370824

회원가입시 확장변수 지정값에 따라 초기 회원그룹이 자동 지정되는 애드온을 만들었었습니다.

사실 addTriggerFunction 이라는 함수도 좀 사용해보고 싶었구요.

 

근데 회원정보 변경시에 해당 확장변수값 수정에 따라 회원그룹이 변경되는 것도 기능에 포함되면 좋겠더라구요.

그래서 아래처럼 코드를 짰고 일단 동작은 잘 됩니다.

다만 코드가 뭔가 아름답지가 않잖아요ㅜㅜ

그렇다고 따로 함수만 담은 php 만들어서 require_once로 불러오는 건 뭔가 일이 커지는 것 같구요.

 

암튼 현재 코드는 이런데요. 어떻게 다듬으면 좋을지 조언 좀 부탁드립니다;;;

 

<?php
if ( !defined('RX_BASEDIR') ) return;
if ( $called_position !== 'before_module_proc' ) return;
if ( !$addon_info->extra_key ) return;

$run = array(0 => 'insertMember', 1 => 'updateMember');
foreach ( $run as $trigger )
{
    $oModuleController = getController('module');
    $oModuleController->addTriggerFunction('member.' . $trigger, 'before', function($args)
    {
        $oAddonModel = getAdminModel('addon');
        $addon_info = $oAddonModel->getAddonInfoXml('ap_group_select');
        $gid = $addon_info->extra_vars[0]->value;

        $obj = Context::getRequestVars();
        $oMemberModel = getModel('member');
        $groups = $oMemberModel->getGroups();

        $selected_group_list = array();
        if ( !is_array($obj->$gid) )
        {
            $selected_group_list[0] = $obj->$gid;
        }
        else
        {
            $selected_group_list = $obj->$gid;
        }

        $group_srl_list = array();
        foreach ( $groups as $group )
        {
            if ( $group->is_admin !== 'Y' && in_array($group->title, $selected_group_list) )
            {
                $group_srl_list[] = $group->group_srl;
            }
        }
        if ( empty($group_srl_list) ) return;

        $args->group_srl_list = $group_srl_list;
        return $args;
    });
}
?>

 

윤삼 Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.

댓글 15

  • 2020.04.04 10:04 #1372417
    if(!function_exists('wstAddonNameTrigger'))
    {
      function wstAddonNameTrigger($args)
      {
        // Code
      }
    }

    $oModuleController = getController('module');
    $oModuleController->addTriggerFunction('member.insertMember', 'before', 'wstAddonNameTrigger);
    $oModuleController->addTriggerFunction('member.updateMember', 'before', 'wstAddonNameTrigger);

     

    함수 존재여부를 체크하는 함수를 활용하면 될 것 같네요.

    function_exists / 자매품 class_exists 도 있어요.

  • 2020.04.04 10:09 #1372425
    오, 한번 해보겠습니다.
    (알림이 뜨지 않는 것 같은 건 기분 탓인가...)
  • 2020.04.04 10:14 #1372431
    말씀하신대로 했더니 다행히 잘 작동됩니다.
    덕분에 코드가 한결 전문가스러워졌어요ㅋㅋㅋ

    그런데 함수 앞에 꼭 function_exists를 두거나, class 선언하기 전에 자매품ㅋ class_exists로 확인해야 하는 건가요?
    아까 이것저것 해보다가 안 됐던 게 addTriggerFunction 안에 콜백함수 적을 때 따옴표를 안쳐서인지, 아니면 함수를 트리거 실행보다 아래쪽에 놔서인지, 아니면 function_exists로 함수 확인을 안해서인지 잘 이해가 되지 않아요;;;
  • 2020.04.04 10:29 #1372442
    addonname.addon.php 파일은 총 4번 호출됩니다.
    $called_position 마다 한번씩 호출되지요.

    PHP에서는 함수 오버라이딩이 안됩니다.
    기존 함수에 다른 로직을 덮어씌우는 행위가 안되는거죠.

    function_exists 를 통한 함수 존재여부 확인을 하지 않을 경우, 총 4번의 함수 선언이 될거고...
    1번 재선언도 안되는데 3번이나 재선언해서 마포대교가 무너지고, 한강이 황폐화되고... 읍..

    물론 지금 코드에서는 호출 사이클을 모듈 실행 전으로 고정해 두었으니, 결과적으로 코드 실행은 1회 뿐이겠지만요.

    아마 기존에 안되었던 이유는 따옴표를 안 넣으셔서 그럴겁니다.

    $funcName = 'var_dump';
    $funcName($parameter);

    addTriggerFunction 함수가 위 방식(문자열을 통한 호출)을 통한 동적 함수호출을 사용하는 방식일텐데,
    따옴표가 없으면 문자열로 인식을 못하고 실제 함수로 인식할테니, '야! 괄호 어디갓숴!' 하고 오류를 뿜는거겠지요.
  • 2020.04.04 10:33 #1372446
    이해했습니다.
    애드온 특성상 주의해야 할 부분이군요.
    아까는 정말 괄호 안 친 것만으로 사이트 전체가 백지였었어요ㅋㅋ
    감사합니다~!
  • 2020.04.04 10:24 #1372438
    15세 미만 / 15세 이상 가입 이나 개인회원 / 사업자회원 등
    회원 가입 -> 분류 -> 정보입력창
    식으로 미리 분류해서 가입받게하는거까지 포함시키시는건 어떠신가요?!
  • 2020.04.04 10:34 #1372454
    회원 가입 -> 분류 -> 정보입력창이 잘 이해가 안 되는데 동작 원리에 대해 좀 더 상세히 설명해주실 수 있을까요오?
  • 2020.04.04 10:37 #1372458
    회원가입 누르면 15세 미만 / 15세 이상 선택으로 가입정보를 다르게 불러오는방식? 이랄까요 ㅋ
    흔히 깡페24 쇼핑몰에 많이사용되는 회원가입방식요
  • 2020.04.04 10:39 #1372462
    처음에 어떤 선택을 하느냐에 따라 입력해야 하는 회원정보 확장변수 세트가 다르게 나온다는 말씀인가요?
    실수요가 좀 있을 수 있겠네요!
  • 2020.04.04 10:40 #1372466
    네 맞아요 ㅋㅋ
    윤삼님 화이팅임다
  • 2020.04.04 10:43 #1372470
    으흐흐흐, 그치만 그건 전혀 다른 애드온이 될 것 같은데요.
    js 작업도 해야 하고,
    왠지 확장변수 세트별로 변수들의 필수/선택 옵션도 조작해야 할 것 같고...
    너무 큰 일이에요ㅜㅜㅜ
  • 2020.04.04 10:57 #1372483
    +_+ 기대해보겠슴다
  • 2020.04.04 11:18 #1372492
    회원가입시 특정 회원그룹으로 자동으로 배정해주는 애드온이죠?
    음.. 곧 사용해야만 할 일이 있을거 같습니다. ㅎㅎ
  • 2020.04.04 11:23 #1372501
    15P라는 높은 포인트가 걸려 있으니 각오하셔욧!
  • 2020.04.04 11:25 #1372507
    ㅋㅋㅋ 한달동안 열심히 벌어서 600원정도 모았습니다. 휴.. 이제 5~6개 정도 마음놓고 구입할 수 있는 여유가 생겼습니다.