2014년 03월 xe세미나 xe 애드온 개발 강좌(1/2)
DESCRIPTION
TRANSCRIPT
![Page 1: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/1.jpg)
XE 애드온
![Page 2: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/2.jpg)
애드온 이란?XE가 실행될 때 중간에 삽입되어 실행되는 프로그램 !중간에 삽입되는 과정을 후킹(hooking) 이라고 표현 !
애드온은 include로 중간에 삽입됨 아래는 ModuleHandler에서 애드온이 삽입되는 과정의 코드
![Page 3: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/3.jpg)
애드온의 역할 및 특징스키마를 가질 수 없음 !모든요청에 대해서 애드온이 실행됨 !모듈이 동작함에 있어서 그 기능을 제한하거나 확장 !간단한 기능 추가를 위해 XE Core 또는 모듈을 수정하게 되면 버전을 업데이트할 때 어려움이 있기 때문에 애드온을 추가해서 원하는 기능을 구현
![Page 4: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/4.jpg)
XE 라이프 사이클URL에 접속한 순간부터 클라이언트에 응답을 보낸 순간까지 XE가 거치는 일련의 과정 !애드온 호출은 체크된 4개의 시점에서 발생 !각 호출 시점은 $called_position 변수로 구분됨
![Page 5: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/5.jpg)
$called_position (호출시점)$called_position은 애드온이 호출 되는 시점에 정의 됨 어느시점에 애드온이 호출되었는지 확인하기 위한 변수
![Page 6: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/6.jpg)
애드온 실행 방식 확인아래 나열된 클래스 메소드를 확인하면 좀더 자세한 애드온 구동방식을 살펴볼 수 있음
!XE_PATH/classes/module/ModuleHandler.class.php ModuleHandler::ModuleHandler() !XE_PATH/classes/module/ModuleObject.class.php ModuleObject::proc() !XE_PATH/classes/display/DisplayHandler.class.php
DisplayHandler::printContent()
![Page 7: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/7.jpg)
$called_position 종류1. before_module_init 모듈을 선언하기 전에 addon을 실행 !2. before_module_proc 모듈을 실행하기 전에 addon을 실행act에 의해 정해진 동작을 수행하기 직전 !3. after_module_proc 모듈을 실행하고 완료된 직후 addon을 실행 !4. before_display_content 결과물 출력을 위한 처리 후 출력하기 전에 addon을 실행
![Page 8: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/8.jpg)
before_module_init
before_module_proc
after_module_proc
![Page 9: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/9.jpg)
$called_position 예시애드온에서 $called_position에 따른 사용예시 !counter 애드온 : before_module_init !member_communication 애드온 : before_module_proc !resize_image 애드온 : after_module_proc !point_level_icon 애드온 : before_display_content
![Page 10: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/10.jpg)
counter
counterController::counterExecute() 은 모듈 처리 작업으로부터 더이상 정보를 얻을 필요가 없으므로 before_module_init 을 사용 !다른 called_position을 사용하면 예외처리가 발생할 경우 counter가 집계되지 않는 문제가 있음
![Page 11: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/11.jpg)
member_communication
닉네임 클릭시 팝업 메뉴에 communication 관련 모듈기능을 추가하기 위한 애드온 !memberModel::getMemberMenu() 에서 메뉴를 추가하는 기능이 모듈 실행이 완료되기 전에 처리되므로 before_module_proc을 사용
![Page 12: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/12.jpg)
resize_image
노출될 페이지에 Context::loadFile()을 통해서 css, js 파일을 추가 !모듈을 처리하면서 페이지 이동등 예외 처리가 발생할 경우 실행되지 않아도 되는 애드온이기 때문에 after_module_proc을 사용
![Page 13: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/13.jpg)
point_level_icon
출력될 html에 div, span, a 태그에 있는 “member_숫자”가 포함된 문자열을 찾아 pointLevelIconTrans()을 실행 !DisplayHandler::printContent() 처리된 html 이 담겨져 있는 $output 변수에 대해서 변경해야 하기 때문에 before_display_content를 사용
![Page 14: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/14.jpg)
애드온 구성
![Page 15: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/15.jpg)
애드온 구성애드온 설치 위치 XE_PATH/addons/ 각 애드온은 애드온 이름의 폴더별로 정의되어 설치됨
!애드온 파일 구성 애드온_이름.addon.php : 애드온 기능 conf/info.xml : 애드온 정보 및 관리자 표시
!관리자 페이지 conf/info.xml 의 내용으로 처리됨 관리자에서 설정한 내용은 files/cache/addons 의 cache 파일과 xe_addons, xe_addons_site DB 테이블에 설정 값 저장
![Page 16: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/16.jpg)
설정 파일 conf/info.xml 구성
![Page 17: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/17.jpg)
/index.php?module=admin&act=dispAddonAdminIndex
![Page 18: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/18.jpg)
![Page 19: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/19.jpg)
info.xml 의 extra_varsextra_vars 애드온에서 설정값을 만들기 위해 선언 xe_addons, xe_addons_site DB 테이블의 extra_vars 필드에 저장됨
!!!!name attribute는 폼 필드의 name attribute 를 설정 type attribute는 text, textarea, select의 폼 필드를 설정 !extra_vars를 통해 선언되고 관리자에서 설정된 값은애드온에서 $addon_info으로 접근할 수 있음
![Page 20: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/20.jpg)
애드온 파일 작성애드온_이름.addon.php !아래와 같이 시작 부분을 작성
파일명(@file), 설명(@brief), 작성자(@author)를 작성 !if(!defined(‘__XE__’)) exit(); XE를 통한 호출이 아닐 경우 동작하지 않기 위한 처리
![Page 21: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/21.jpg)
$called_position을 사용하는 코드 예시어떤 위치에서 애드온을 실행시킬지 아래와 같이 조건식으로 처리
![Page 22: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/22.jpg)
XML 쿼리 사용애드온에서 다른 모듈이 생성한 DB 테이블에 쿼리 사용 애드온 폴더 아래 queries 라는 폴더를 생성하고 XML쿼리문을 만듬
생성된 xml 쿼리는 executeQuery(‘addons.애드온_이름.쿼리ID’,$args); 으로 실행한다. executeQuery(‘addons.addon_ex.getDocumentCount’,$args);
![Page 23: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/23.jpg)
애드온 cache file
애드온을 사용함으로 체크하면 XE_PATH/files/cache/addons 에 설정 값을 저장site_srl 에 따라 pc, mobile의 설정 값을 따로 저장 !0pc.activated_addons.cache.php
![Page 24: 2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)](https://reader033.vdocuments.site/reader033/viewer/2022042513/54810fafb4af9fb4158b5e3e/html5/thumbnails/24.jpg)
감사합니다[email protected]