애드온 동작

member_join_extend 애드온은 가입폼인 dispMemberSignUpForm action이 실행된 뒤인 after_module_proc 시점에서 세션을 유무를 체크해 세션이 없으면 템플릿을 애드온의 템플릿과 교체합니다.

애드온의 동의시 exec_xml()로 'MemberJoinExtendAgree'+ ' 를 호출하고 'before_module_init' 시점에서 애드온의 'MemberJoinExtendAgree' 액션을 받아 세션을 등록한 뒤 dispMemberSignUpForm 페이지를 자바스크립트로 리로드 합니다.

그리고 실제 회원 가입이 완료 되었을 경우에는 세션을 삭제합니다.

    if($called_position == 'before_module_init'){

        // 실제 가입시 체크
        if(Context::get('act')=='procMemberInsert'){
            // 세션확인후 세션이 없으면 에러 표시

        // 동의시 action
        }else if(Context::get('act') =='MemberJoinExtendAgree'){
              // javascript의 exec_xml로 호출, 세션을 등록하고 XE의 출력인 XML_RPC로 success 출력
        }  

    } else if($called_position == 'after_module_proc') {

        if(Context::get('act') == "dispMemberSignUpForm"){

            // 세션체크하여 애드온 실행
            if(!$_SESSION['member_join_extend_authed']){
               // 애드온의 템플릿과 교체
            }  

        // delete session
        }else if(in_array(Context::get('act'),array('procMemberInsert'))){
        }  
    }  

extra_vars와 $addon_info

info.xml에서 설정한 extra_vars값은 애드온에서 $addon_info 의 stdClass member variable로 사용하면 됩니다.
// 애드온의 템플릿과 교체 부분에서 아래와 같이 애드온 확장변수 값을 받아 정리한뒤 Context를 통해 템플릿에서 사용할 변수로 셋팅합니다.

                if($addon_info->use_agreement=='Y' && $addon_info->agreement){
                    Context::set('agreement',$addon_info->agreement);
                }
                if($addon_info->use_private_agreement=='Y' && $addon_info->private_agreement){
                    Context::set('private_agreement',$addon_info->private_agreement);
                    Context::set('private_gathering_agreement',$addon_info->private_gathering_agreement);
                }
                if($addon_info->use_junior_join=='Y'){
                    Context::set('use_junior_join',$addon_info->use_junior_join);
                }


compile template 및 치환

애드온 실행 시점인 after_module_proc 부분은 모듈이 실행된 뒤 바로 애드온이 실행됩니다. member 모듈의 dispMemberSignUpForm action으로 들어왔을 때 ModuleObject class에서 dispMemberSignUpForm action이 실제 실행되고 해당 템플릿과 템플릿 위치를 설정하고 after_module_proc 시점에서 애드온이 실행되고 DisplayHandler class에서 컴파일되어 보여지게 됩니다. after_module_proc 시점에서 ModuleObject::setTemplatePath() 와 ModuleObject::setTemplateFile() 로 애드온의 템플릿 파일로 over setting 하여 애드온의 템플릿이 DisplayHandler 에 넘겨지도록합니다.

                // load addon lang
                Context::loadLang(_XE_PATH_.'addons/member_join_extend/lang');
                Context::addHtmlHeader(sprintf('<script type="text/javascript"> var msg_junior_join ="%s"; var msg_check_agree ="%s";</script>',trim($addon_info->msg_junior_join),Context::getLang('msg_check_agree')));

                // change module template
                Context::addJsFile('+ './addons/member_join_extend/member_join_extend.js',false);
                $addon_tpl_path = './addons/member_join_extend/tpl';
                $addon_tpl_file = 'member_join_extend.html';

                $this->setTemplatePath($addon_tpl_path);
                $this->setTemplateFile($addon_tpl_file);