02. member_join_extend 애드온 동작부분 작성하기

조회 수 745 추천 수 0 2010.11.25 17:56:48
SMaker *.22.160.122
제목 작성자 날짜
02. member_join_extend 애드온 동작부분 작성하기 (current) SMaker 2010.11.25 17:56:48
복원
<div class="eArea xe_content xe_dr_hx"><h3 id="h1251274979372">애드온 동작</h3></div><div class="eArea xe_content xe_dr_txt"><p>member_join_extend 애드온은 가입폼인 <b>dispMemberSignUpForm </b>action이 실행된 뒤인 <b>after_module_proc </b>시점에서 세션을 유무를 체크해 세션이 없으면 템플릿을 애드온의 템플릿과 교체합니다.</p><p>애드온의 동의시 exec_xml()로 '<b>MemberJoinExtendAgree</b>' 를 호출하고 '<b>before_module_init</b>' 시점에서 애드온의 'MemberJoinExtendAgree' 액션을 받아 세션을 등록한 뒤 dispMemberSignUpForm 페이지를 자바스크립트로 리로드 합니다.<br></p><p>그리고 실제 회원 가입이 완료 되었을 경우에는 세션을 삭제합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp; if($called_position == '<b>before_module_init</b>'){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 실제 가입시 체크<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Context::get('act')=='<b>procMemberInsert</b>'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 세션확인후 세션이 없으면 에러 표시</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 동의시 action <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(Context::get('act') =='<b>MemberJoinExtendAgree</b>'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // javascript의 exec_xml로 호출, 세션을 등록하고 XE의 출력인 XML_RPC로 success 출력<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; } else if($called_position == '<b>after_module_proc</b>') {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Context::get('act') == "<b>dispMemberSignUpForm</b>"){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 세션체크하여 애드온 실행<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!$_SESSION['member_join_extend_authed']){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 애드온의 템플릿과 교체<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // delete session<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(in_array(Context::get('act'),array('<b>procMemberInsert</b>'))){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1251275047665">extra_vars와 $addon_info</h3></div><div class="eArea xe_content xe_dr_txt"><p>info.xml에서 설정한 extra_vars값은 애드온에서 $addon_info 의 stdClass member variable로 사용하면 됩니다. <br><span style="font-weight: bold;">// 애드온의 템플릿과 교체 </span>부분에서 아래와 같이 애드온 확장변수 값을 받아 정리한뒤 Context를 통해 템플릿에서 사용할 변수로 셋팅합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_agreement=='Y' &amp;&amp; <span style="font-weight: bold;">$addon_info</span>-&gt;agreement){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('agreement',<span style="font-weight: bold;">$addon_info-</span>&gt;agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_private_agreement=='Y' &amp;&amp; <span style="font-weight: bold;">$addon_info</span>-&gt;private_agreement){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('private_agreement',<span style="font-weight: bold;">$addon_info</span>-&gt;private_agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('private_gathering_agreement',<span style="font-weight: bold;">$addon_info</span>-&gt;private_gathering_agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_junior_join=='Y'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('use_junior_join',<span style="font-weight: bold;">$addon_info</span>-&gt;use_junior_join);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1251275671021">compile template 및 치환</h3></div><div class="eArea xe_content xe_dr_txt"><p>애드온 실행 시점인 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 에 넘겨지도록합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // load addon lang <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::loadLang(_XE_PATH_.'addons/member_join_extend/lang');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::addHtmlHeader(sprintf('&lt;script type="text/javascript"&gt; var msg_junior_join ="%s"; var msg_check_agree ="%s";&lt;/script&gt;',trim($addon_info-&gt;msg_junior_join),Context::getLang('msg_check_agree')));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // change module template<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::addJsFile('./addons/member_join_extend/member_join_extend.js',false);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $addon_tpl_path = './addons/member_join_extend/tpl';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $addon_tpl_file = 'member_join_extend.html';<br><br><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;setTemplatePath($addon_tpl_path);</span><br style="font-weight: bold;"><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;setTemplateFile($addon_tpl_file);</span><br style="font-weight: bold;"><br></p></div>
sol 2009.08.27 07:13:36
복원
<div class="eArea xe_content xe_dr_hx"><h3 id="h1251274979372">애드온 동작</h3></div><div class="eArea xe_content xe_dr_txt"><p>member_join_extend 애드온은 가입폼인 dispMemberSignUpForm action이 실행된 뒤인 after_module_proc 시점에서 세션을 유무를 체크해 세션이 없으면 템플릿을 애드온의 템플릿과 교체합니다.</p><p>애드온의 동의시 exec_xml()로 'MemberJoinExtendAgree' 를 호출하고 'before_module_init' 시점에서 애드온의 'MemberJoinExtendAgree' 액션을 받아 세션을 등록한 뒤 dispMemberSignUpForm 페이지를 자바스크립트로 리로드 합니다.<br></p><p>그리고 실제 회원 가입이 완료 되었을 경우에는 세션을 삭제합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp; if($called_position == 'before_module_init'){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 실제 가입시 체크<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Context::get('act')=='procMemberInsert'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 세션확인후 세션이 없으면 에러 표시</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 동의시 action <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(Context::get('act') =='MemberJoinExtendAgree'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // javascript의 exec_xml로 호출, 세션을 등록하고 XE의 출력인 XML_RPC로 success 출력<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; } else if($called_position == 'after_module_proc') {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(Context::get('act') == "dispMemberSignUpForm"){</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 세션체크하여 애드온 실행<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!$_SESSION['member_join_extend_authed']){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 애드온의 템플릿과 교체<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // delete session<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(in_array(Context::get('act'),array('procMemberInsert'))){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1251275047665">extra_vars와 $addon_info</h3></div><div class="eArea xe_content xe_dr_txt"><p>info.xml에서 설정한 extra_vars값은 애드온에서 $addon_info 의 stdClass member variable로 사용하면 됩니다. <br><span style="font-weight: bold;">// 애드온의 템플릿과 교체 </span>부분에서 아래와 같이 애드온 확장변수 값을 받아 정리한뒤 Context를 통해 템플릿에서 사용할 변수로 셋팅합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_agreement=='Y' &amp;&amp; <span style="font-weight: bold;">$addon_info</span>-&gt;agreement){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('agreement',<span style="font-weight: bold;">$addon_info-</span>&gt;agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_private_agreement=='Y' &amp;&amp; <span style="font-weight: bold;">$addon_info</span>-&gt;private_agreement){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('private_agreement',<span style="font-weight: bold;">$addon_info</span>-&gt;private_agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('private_gathering_agreement',<span style="font-weight: bold;">$addon_info</span>-&gt;private_gathering_agreement);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(<span style="font-weight: bold;">$addon_info</span>-&gt;use_junior_join=='Y'){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::set('use_junior_join',<span style="font-weight: bold;">$addon_info</span>-&gt;use_junior_join);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br><br></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1251275671021">compile template 및 치환</h3></div><div class="eArea xe_content xe_dr_txt"><p>애드온 실행 시점인 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 에 넘겨지도록합니다.<br></p></div><div class="eArea xe_content xe_dr_txt"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // load addon lang <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::loadLang(_XE_PATH_.'addons/member_join_extend/lang');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::addHtmlHeader(sprintf('&lt;script type="text/javascript"&gt; var msg_junior_join ="%s"; var msg_check_agree ="%s";&lt;/script&gt;',trim($addon_info-&gt;msg_junior_join),Context::getLang('msg_check_agree')));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // change module template<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Context::addJsFile('./addons/member_join_extend/member_join_extend.js',false);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $addon_tpl_path = './addons/member_join_extend/tpl';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $addon_tpl_file = 'member_join_extend.html';<br><br><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;setTemplatePath($addon_tpl_path);</span><br style="font-weight: bold;"><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;setTemplateFile($addon_tpl_file);</span><br style="font-weight: bold;"><br></p></div>
sol 2009.08.26 17:56:49