SlideShare a Scribd company logo
1 of 79
Download to read offline
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE 모듈 개발
걸음마부터 날기까지
걷기
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
소개
신승엽 (난다날아)
NHN Entertainment
● SocialXE 개발
● XE Core 개발
(2011.7 ~ 2013.6)
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
이 강의는...
걸음마 - 개발환경 구축, XE 설치
걷기 - XE 모듈 개념, 간단한 모듈 개발
달리기 - 개발한 모듈 발전 시키기
날기 - 고급 주제
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE 구조
OS, 웹서버 등 플랫폼 스택 위에 XE Core가 위치
하며 모듈, 애드온, 위젯과 같은 구성요소가 XE
core를 통해 실행되는 구조
운영체제
웹서버
PHP
DBMS
XE core
애드온 모듈위젯
레이아웃 모듈
스킨 레이아웃
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE Control Path
Context 초기화 실행 모듈 결정 모듈 실행 결과 출력
Context
사전적 의미: 맥락, 문맥
XE에서는: XE 구동에 필요한 여러 정보를 담고 조작할 수
있는 클래스
초기화
요청/응답 유형(GET, POST, XML, JSON)
요청 파라미터/업로드 파일
DB 초기화
언어
인증 정보
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE Control Path
Context 초기화 실행 모듈 결정 모듈 실행 결과 출력
ModuleHandler
모듈을 선택하고 실행하기 위한 클래스
실행 모듈 결정
module, mid, act, document_srl, module_srl 등 파라미터 정보를 기반으
로 모듈과 클래스(controller, view, model)를 결정
module.xml
모든 모듈이 가지고 있어야 할 파일로 모듈의 퍼미션, 액션, 룰셋 정보를
가지고 있음
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE Control Path
Context 초기화 실행 모듈 결정 모듈 실행 결과 출력
모듈 실행
퍼미션 체크, 룰셋 체크 후 모듈 실행
모듈 실행 시 Context의 정보를 이용하며 화면에 보여주고 싶은 정보 또한
Context에 세팅
출력 형식도 결정 지을 수 있음
ModuleObject
모든 모듈 클래스가 상속 받는 상위 클래스
ModuleHandler::procModule()
ModuleObject::proc()
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
XE Control Path
Context 초기화 실행 모듈 결정 모듈 실행 결과 출력
결과 출력
현재 모듈의 레이아웃/메뉴 정보 Context에 세팅
Context에 설정된 출력 형식에 따라 적합한 DisplayHandler를 선택한 후
결과를 출력
DisplayHandler
XE 실행 결과를 출력하기 위한 클래스
HTML/XML/JSON 출력이 가능 ModuleHandler::displayContent()
DisplayHandler::printContent()
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
conf: 모듈 설명, 액션 권한 설정을 포함한 폴더
info.xml: 모듈 제작자 정보와 설명
module.xml: 모듈 동작과 관련한 정보
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
lang: 모듈에서 사용하는 언어 파일을 포함한 폴더
lang.xml: 언어 파일
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
m.skins: 모바일 스킨을 포함하는 폴더
skin.xml: 스킨 정보와 설정 등을 담은 파일
- 그외 파일과 폴더는 자유롭게 구성할 수 있으며
관습적으로 css, img(images), js 등의 폴더로 구성
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
queries: DB 조작을 위한 쿼리 파일을 담은 폴더
*.xml: 쿼리 xml 파일
- XE가 여러 DBMS를 지원할 수 있는 이유는
쿼리를 추상화하여 xml로 표현하기 때문
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
ruleset: 유효성 검사를 위한 룰셋을 담은 폴더
*.xml: 룰셋 xml 파일
- 룰셋은 유효성 검사를 위한 규칙들을 정의한 것
- 프론트엔트에서 js를 이용한 검사 뿐 아니라
모듈 액션 구동 단계에서도 룰셋을 적용할 수 있음
- 프론트엔트 유효성 검사는 사용자 편의로 생각하고
무조건 서버 측 유효성 검사가 수행되어야 함.
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
skins: PC 스킨을 담은 폴더
skin.xml: 스킨 정보, 설정 등을 담은 파일
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
tpl: 템플릿 파일을 담은 폴더
- 주로 관리자 페이지의 View를 위한 템플릿
- 특별한 경우 스킨과 상관없이 동일한 템플릿도 사
용
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구조
[NAME].class.php: 모듈의 최상위 클래스
[NAME].admin.controller.php: 관리자 컨트롤러 클래스
[NAME].admin.model.php: 관리자 모델 클래스
[NAME].admin.view.php: 관리자 뷰 클래스
[NAME].controller.php: 컨트롤러 클래스
[NAME].model.php: 모델 클래스
[NAME].view.php: 뷰 클래스
[NAME].mobile.php: 모바일 페이지 제공을 위한 클래스
[NAME].wap.php: WAP 페이지 제공을 위한 클래스(스마트폰 시대에 필요치 않음)
[NAME].api.php: API 제공을 위한 클래스
- MVC 모델 본래의 의미와는 약간 다른 형태
- Model: get 계열 메소드
- View: 출력(disp) 계열 메소드
- Controller: insert/modify/delete 계열 메소드
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
손 안 대고 코 풀기 - Document, Comment 모듈
Document/Comment 모듈: XE에서 만들어지는 모든 "문서/댓글"을 관리하기 위한 모듈
모듈 제작 시에 자체적으로 DB 스키마를 정의하여 데이터를 저장할 수도 있겠지만 Document/Comment 모듈을 사용하
면 한 곳에서 통합 관리할 수 있고 최신글(댓글) 위젯 등에서도 우리가 만든 모듈의 글(댓글)을 아무런 수정 없이 사용할
수 있음
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 구상
목표: XE의 기본 요소들을 활용하는 간단한 모듈을 제작
요구사항
- Document, Comment 모듈 사용
- 사이트 메뉴 편집과 호환
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
나의 게시판
목록 보기
내용 보기
글 쓰기
댓글 쓰기
사이트 메뉴 편집을 통해 추가/설정
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 폴더 생성
XE ROOT/modules/myboard 폴더 생성
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
info.xml 생성 https://gist.github.com/flyskyko/47a688edfdda468e3300
MODULE ROOT/conf/info.xml 파일 생성
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
module.xml 생성 https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/1988b45cc99a10c6025b02300
ae7923fea2b5f06
MODULE ROOT/conf/module.xml 파일 생성
module.xml
- 모듈 동작에 관한 정보를 가진 파일
<grants>
- 권한 관련 정보
<permissions>
- 액션 실행 퍼미션 관련 정보
<actions>
- 모듈이 가진 액션 관련 정보
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
myboard.class.php 생성 https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/f73b95dccc278f59
1a533557a50e63603aa696f5
MODULE ROOT/myboard.class.php 파일 생성
[MODULENAME].class.php
- XE의 모든 모듈 class 파일은 ModuleObject를 상속받아야 함
[MODULENAME]::moduleInstall()
- XE 초기 설치/쉬운설치 시에 호출 됨
[MODULENAME]::checkUpdate()
- 모듈 업데이트 여부를 체크하기 위해 호출 됨
[MODULENAME]:: moduleUpdate()
- 모듈 업데이트 시 호출 됨
[MODULENAME]::moduleUninstall()
- 모듈 삭제 시 호출 됨
- 모듈이 쉬운 설치에 올라가 있을 때만 삭제가 가능
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
menu.getModuleListInSitemap after 트리거를 등록하여
모듈명을 파라미터로 받은 배열에 추가해 주면 메뉴 타
입으로 등록 됨
트리거: 특정 액션 이전이나 이후 어떠한 동작을 하고 싶
을 때 사용할 수 있음
예) 글 작성 완료 시 포인트 차감
글 삭제 시 관련된 데이터DB에서 삭제
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.class.php 파일 수정
트리거 등록을 위한 $triggers 멤버 변수 추가
- 트리거 정보를 가진 배열의 배열
- name: 사용할 트리거 이름
- module: 트리거 발생 시 실행할 모듈 이름
- type: 메소드가 포함된 클래스 타입
- func: 트리거 발생 시 실행할 메소드 이름
- position: 해당 트리거 이전/이후 실행인지 여부
※ before 혹은 after만 가진 트리거 존
재
https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191
254b9676259fcfc71
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.class.php 파일 수정
moduleInstall() 메소드에 트리거 등록 추가
- 멤버 변수 $triggers 배열을 순회하면서 트리거를
등록
- XE 설치 시에 우리 모듈이 modules 안에 존재한
다면 이 메소드가 실행
ModuleController
- 모듈과 관련된 조작 메소드를 가지고 있음
ModuleController::insertTrigger()
- 트리거를 등록하는 메소드
https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191
254b9676259fcfc71
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.class.php 파일 수정
checkUpdate() 메소드에 트리거 확인 추가
- $triggers를 순회하며 등록되었는지 확인
- 등록되지 않았다면 true를 반환하여 관리자 페이
지에 모듈 업데이트가 나오도록 함
ModuleModel
- 모듈과 관련된 get 계열 메소드를 가지고 있음
ModuleModel::getTrigger()
- 트리거 정보를 받는 메소드
https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191
254b9676259fcfc71
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.class.php 파일 수정
moduleUpdate() 메소드에 트리거 등록 추가
- $triggers를 순회하며 등록되었는지 확인한 후 안
되어 있다면 등록
https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191
254b9676259fcfc71
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.class.php 파일 수정
moduleUninstall() 메소드에 트리거 제거 추가
- $triggers를 순회하며 트리거를 제거
- 우리 모듈이 쉬운설치에 올라가 있다면 이 메소드
를 통해 모듈을 삭제할 수 있음
ModuleController::deleteTrigger()
- 트리거를 제거하는 메소드
https://gist.github.
com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191
254b9676259fcfc71
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
MODULE ROOT/myboard.model.php 파일 생성
[MODULENAME]Model
- 해당 모듈의 get 관련 메소드를 가진 클래스
- 해당 모듈 클래스를 상속 받아야 함
triggerModuleListInSitemap()
- 메뉴 타입으로 나오게 하기 위한 메소드
- myboard 클래스에서 menu.
getModuleListInSitemap 트리거에 이 메소드를 등
록했기 때문에 해당 트리거 발생 시 이 메소드가 호
출 됨
- 파라미터는 메뉴 타입으로 나올 수 있는 모듈 이
름을 담은 배열로 반드시 레퍼런스 타입으로 받은
후 배열에 모듈 이름을 추가해 주어야 함
https://gist.github.
com/flyskyko/71da75de329c2ce9a136/375c6f125e223c1b3a3392
d753c3ef10401024ed
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
클래스 이름 규칙
규칙에 맞게 클래스 이름을 사용하여야 XE가 액션을 제대로 실행할 수 있음
파일명 모듈명 Admin 타입 결과 상위클래스
myboard.class.php
myboard
myboard ModuleObject
myboard.admin.controller.php
Admin
Controller myboardAdminController
myboard
myboard.admin.model.php Model myboardAdminModel
myboard.admin.view.php View myboardAdminView
myboard.controller.php Controller myboardController
myboard.model.php Model myboardModel
myboard.view.php View myboardView
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
myboard.class.php 파일을 수정한 후 관리자 페이
지로 접속하면 모듈 업데이트가 표시 됨
업데이트 후 사이트 메뉴 편집으로 접속한 후 메뉴 추가를 눌러
보면 '나의 게시판'이 추가된 것을 확인할 수 있음
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
메뉴 타입으로 등록
이제 메뉴 타입으로 등록되었으니 '나의 게시판' 메뉴를 하나 추가해 보세요.
물론 아직 되는 것은 하나도 없습니다.
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
권한 설정 만들기
모듈 구상 시에 생각했던 기능들에 대한 권한을 설정할
수 있도록 해봅시다.
목록 보기 권한
내용 보기 권한
글 쓰기 권한
댓글 쓰기 권한
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
권한 설정 만들기
MODULE ROOT/conf/module.xml 파일 수정
<grant>
- 권한 설정 정보를 가진 노드
- name: 코드에서 사용할 이름
- default: 기본 권한 설정
guest: 모든 사용자
member: 로그인 사용자
manager: 관리자
<title>
- 권한 설정 화면에 표시될 이름
나머지는 XE가 다 알아서...
https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/2d301e5f3ce0e6931f98f0c
8198ba06dfec17625
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
권한 설정 만들기
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
사이트 메뉴 편집에서 간단하게 모듈에 대한 설정이 가능한 simple setup을 만
들어 봅니다.
게시판 상단에 표시할 게시판 제목 설정을 만들어 봅니다.
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/conf/module.xml 파일 수정
https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/02981f3dffca5b1c472bc7a
3fb510f6d9003943c
<action>
- 프론트엔드에서 요청할 수 있는 모듈의 특정 액션
에 대한 정보
- name: 액션 이름
- type: 액션 메소드가 포함된 클래스 타입
- simple_setup_index: 이 속성이 true인 액션을
simple setup용으로 사용하며 응답은 설정을 위한
HTML 마크업
<permisson>
- 액션에 적용할 퍼미션 정보
- action: 액션 이름
- target: 적용할 퍼미션
- 퍼미션은 권한과는 다른 개념으로 해당 액션에 필
요한 최소한의 '권한'으로 이해
- 퍼미션은 액션 실행 전 XE에 의해 체크 됨
- guest, member, manager
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
액션 이름 규칙
규칙에 맞게 액션 이름을 사용하여야 XE가 액션을 제대로 실행할 수 있음
클래스 접두어 모듈명 Admin 액션 결과
myboardAdminController proc
Myboard
Admin
Blahblah
procMyboardAdminBlahblah
myboardAdminModel get getMyboardAdminBlahblah
myboardAdminView disp dispMyboardAdminBlahblah
myboardController proc procMyboardBlahblah
myboardModel get getMyboardBlahblah
myboardView disp dispMyboardBlahblah
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/myboard.admin.model.php 파일 생
성
모듈 정보, 모듈 설정을 가져와서 템플릿에서 사용할
수 있도록 세팅하고 템플릿을 컴파일한 결과를 반환!
https://gist.github.
com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d
9fdcf225d8a3f96383
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/myboard.admin.model.php 파일 생
성
getMyboardAdminSimpleSetup()
- simple setup 화면을 위한 HTML 마크업을 반환하는
메소드
- $moduleSrl: 해당 모듈의 번호
- $setupUrl: 자체 관리자 화면 URL
ModuleModel::getModuleInfoByModuleSrl()
- 모듈 번호에 해당하는 모듈의 정보를 반환하는 메소
드
ModuleModel::getModulePartConfig()
- 모듈 이름과 모듈 번호로 해당 모듈의 설정 정보를 반
환하는 메소드
https://gist.github.
com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d
9fdcf225d8a3f96383
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/myboard.admin.model.php 파일 생
성
Context::set()
- 변수명, 변수값으로 템플릿에서 사용할 변수를 세팅
할 수 있는 메소드
TemplateHandler
- 템플릿을 다루기 위한 클래스
TemplateHandler::getInstance()
- 템플릿 핸들러를 얻기 위한 메소드
TemplateHandler::compile()
- 특정 템플릿 파일을 컴파일한 결과를 반환하는 메소
드
https://gist.github.
com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d
9fdcf225d8a3f96383
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
템플릿
출력 내용을 미리 준비해 두고 필요한 부분만 대치하여 사용
메일 머지 기능 아세요?
NAME DATE
신승엽 4월 23일
홍경원 8월 14일
김예솔 1월 10일
신승엽님의 생일을 축하드립니다.
4월 23일에 태어난 신승엽님! 생일
을 진심으로 축하드립니다.
생일이신 회원님을 위한 혜택...
홍경원님의 생일을 축하드립니
8월 14일에 태어난 홍경원님! 생
을 진심으로 축하드립니다.
생일이신 회원님을 위한 혜택..
김예솔님의 생일을 축하드립니다.
1월 10일에 태어난 김예솔님! 생일
을 진심으로 축하드립니다.
생일이신 회원님을 위한 혜택...
미리 준비된 내용 Data 결과
머지
[NAME]님의 생일을 축하드립니다.
[DATE]에 태어난 [NAME]님! 생일
을 진심으로 축하드립니다.
생일이신 회원님을 위한 혜택...
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
템플릿
- 미리 준비된 내용: 템플릿
- Data: Context에 세팅된 변수
- 머지: 템플릿 컴파일
템플릿 Context Data
결과
컴파일
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/tpl/simple_setup.html 파일 생성
https://gist.github.
com/flyskyko/0b767c6740af5a680b6c/c46e42a9337dcf7865507bc
e6e768c82370d81ea
<form>
- 설정을 전송할 form
- module_srl: 설정을 저장할 모듈의 번호
- act: 실행할 액션명
{$varname}
- 변수를 출력하기 위한 XE 템플릿 문법
{$lang->varname}
- $lang: 언어 변수
- 현재 언어에 맞는 언어 변수의 값
- XE에서 알아서 언어 변수를 세팅 함
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/lang/lang.xml 파일 생성
https://gist.github.
com/flyskyko/1d332fdef26786b55340/e4ebdcdf635261c1eb360ab
c03d36fd9cc7d924b
<lang>
- lang.xml은 lang 노드로 시작
<item>
- 하나의 언어 변수를 나타내는 노드
- name: 언어 변수 이름
<value>
- 변수의 값
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
MODULE ROOT/myboard.admin.controller.php 파
일 생성
$moduleInfo 체크
- 파라미터로 들어온 module_srl에 해당하는 모듈이
우리 모듈인지 반드시 체크
moduleController::insertModulePartConfig
- 개별 모듈에 대한 설정을 저장하는 메소드
https://gist.github.
com/flyskyko/b85488d4585f9d27585b/66cfc62e3a9a4e63bc3ca04
47c1821d1fcd6f537
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
모듈 설정 만들기
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
MODULE ROOT/conf/module.xml 파일 수정
https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/246055e2c4b7cbdf981f90
3b40d8857fc3021d4c
standalone 속성
- 해당 액션이 반드시 mid 파라미터를 가지고 실행되어야 할 경우 false로 세팅
- 이 속성을 사용하지 않으면 보안 문제가 생길 수 있음
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
MODULE ROOT/myboard.view.php 파일
생성
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6
4d57a6192450a0d54e
init()
- XE가 제일 먼저 실행시켜주는 메소드
ModuleObject::setTemplatePath()
- 템플릿 경로를 세팅하는 메소드
ModuleObject::setTemplateFile()
- 템플릿 파일을 세팅하는 메소드
템플릿
- 액션을 통해 실행할 경우 경로와 파일
만 지정하면 XE가 템플릿을 컴파일하
며 결과를 보여 줌
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
init()에서 템플릿 지정 방식
- 액션 이름에서 공통인 ‘dispMyboard’
를 제외하고 템플릿 파일명으로 사용
- dispMyboardWrite라면 Write
- 이렇게 하면 매 액션에서 템플릿파일
을 따로 지정하지 않아도 됨
dispMyboardWrite()
- 글 쓰기 화면을 보여주는 메소드
- 권한만 체크하고 따로 하는 것을 없음
MODULE ROOT/myboard.view.php 파일
생성
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6
4d57a6192450a0d54e
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
MODULE ROOT/myboard.view.php 파일
생성
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6
4d57a6192450a0d54e
글 쓰기 화면 만들기
$this->grant
- XE에서 권한 설정값을 세팅해 줌
- module.xml의 <grant> 노드의 name
속성을 사용
- permission은 XE가 체크해 주지만
grant는 직접 체크해야 함!
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
MODULE ROOT/skins/default/skin.xml 파일 생성
https://gist.github.
com/flyskyko/31252636105bd39032ec/dc5f15ef4f1119ce82db752
97e64970d84cb85c3
스킨
- skins 폴더 아래에 스킨 위치
- 기본 스킨 폴더명은 무조건 default
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
MODULE ROOT/skins/default/_head.html 파일 생성
https://gist.github.
com/flyskyko/22f8034dad3af708edc5/70894ba8d9b6756e725688
d0f84fb15acc610cac
{$config->title}
- 좀 전에 만든 모듈 설정에서 게시판 제목을 표
시해 줌
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기
MODULE ROOT/skins/default/Write.html 파일 생성
https://gist.github.
com/flyskyko/e6e0eecf3cd49a10dfcc/45e3ff0450ea87d7685404de
05a6df92bf1f8cb2
<include>
- 현재 위치에 다른 템플릿을 삽입
<block>
- XE 템플릿에서만 사용되는 가상 엘리먼트
cond 속성
- 엘리먼트 속성으로 사용하면 조건에 맞을 경
우에만 엘리먼트가 표시 됨
$logged_info
- 로그인 정보
- XE가 기본적으로 세팅해주는 변수
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 화면 만들기 http://localhost/xe/?mid=myboard&act=dispMyboardWrite
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 처리 만들기
MODULE ROOT/conf/module.xml 파일 수정
https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/3e61f534eb4003c7372771
e98ab0c98574bc1ff5
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 처리 만들기
MODULE ROOT/myboard.controller.php 파일 생성
https://gist.github.
com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b7
1510b4c419470c655b
$args
- document 등록을 위한 파라미터
documentController
- document와 관련된 조작 메소드를 가지고 있음
documentController::insertDocument()
- document를 등록한다
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 처리 만들기
MODULE ROOT/myboard.controller.php 파일 생성
https://gist.github.
com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b7
1510b4c419470c655b
getNotEncodedUrl()
- url encode 되지 않은 url을 만드는 함수
- 글쓰기 성공 시 글 보기 화면으로 이동 시키기
위해 http 302 header를 사용할 것이므로 url
encode 되지 않은 url을 사용 함
ModuleObject::setRedirectUrl()
- 모듈 실행이 종료된 후 다른 url로 사용자를
redirect 시키는 메소드
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 쓰기 처리 만들기
글 작성을 해보면 document_srl이 붙은 url로 이동하는 것을 확인할 수 있습니다.
물론 아직은 글 보기 화면이 없기 때문에 404 에러가 나옵니다.
http://localhost/xe/?mid=myboard&act=dispMyboardWrite
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/conf/module.xml 파일 수정
https://gist.github.
com/flyskyko/19eebce5aa13e0b71209/3b3b44837d97663f3a4114
c0f5ad83fa6d466699
index 속성
- 모듈의 기본 view를 세팅하는 속성
- act 값이 없어도 해당 모듈에 접속 시 index 속성이 있는 액션이 실행 됨
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88
511dcf6644d9dc7f84#file-myboard-view-php-L30
dispMyboardContent()
- mid=[mid]&document_srl=[document_srl] 혹은 mid=[mid]의 형태
로 접속할 수 있기 때문에 하나의 액션에서 document_srl 유무에
따라 글 보기 혹은 목록 보기로 분기 하도록 구성
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9
a88511dcf6644d9dc7f84#file-myboard-view-php-L47
viewDocument()
- 글 보기 화면을 보여주는 메소드
- 외부에 공개될 필요가 없기 때문에 private로 지정
documentModel
- document와 관련된 get 메소드를 가지고 있음
documentModel::getDocument()
- document을 가져오는 메소드
- 반환 값은 documentItem
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9
a88511dcf6644d9dc7f84#file-myboard-view-php-L47
documentItem::isExists()
- 존재하는 document인지 반환하는 메소드
documentItem::setGrant()
- 현재 사용자에게 document의 모든 권한을 주는 메소드
documentItem::updateReadedCount()
- document의 조회수를 증가 시키는 메소드
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9
a88511dcf6644d9dc7f84#file-myboard-view-php-L47
Context::addBrowserTitle()
- 현재 브라우저 제목에 추가로 문자열을 더하는 메소드
- [현재 제목] - [추가된 제목] 형태
$this->setTemplateFile(‘View’)
- init()에서 액션 이름에 따라 자동으로 템플릿 파일을 지정하도
록 했지만 글 보기, 목록 보기 모두 액션 이름이 동일하기 때문에
예외적으로 직접 템플릿 파일을 지정
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/skins/default/View.html 파일 생성
documentItem::getTitle()
- document의 제목을 가져오는 메소드
documentItem::getRegdate()
- document의 등록 시간을 가져오는 메소드
documentItem::getNickName()
- document의 글쓴이 이름을 가져오는 메소드
documentItem::getContent()
- document의 내용을 가져오는 메소드
https://gist.github.
com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081
7cf09ce05996684ed1
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/skins/default/View.html 파일 생성
Object
- XE의 모든 클래스의 최상위 클래스
Object::get()
- add(), get() 메소드를 통해 데이터를 오브젝트에 저장할 수 있
음
$oDocument->get(‘readed_count’)
- document 오브젝트에 저장된 readed_count을 가져오는 것
- Document 모듈에서 documentIteam 생성 시 필요한 데이터들
을 세팅 함
https://gist.github.
com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081
7cf09ce05996684ed1
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
MODULE ROOT/skins/default/View.html 파일 생성
getUrl()
- url encode된 url을 만드는 함수
- html에 사용할 때는 url을 url encode하는 것이 표준
https://gist.github.
com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081
7cf09ce05996684ed1
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 보기 화면 만들기
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda
4d9a88511dcf6644d9dc7f84#file-myboard-view-php-L86
viewList()
- 글 목록을 보여주는 메소드
- 외부에 공개될 필요가 없기 때문에 private로 지정
$args
- 글 목록을 가져오기 위한 파라미터
- module_srl: 현재 모듈 번호
- page: 현재 페이지 번호
- list_count: 한 페이지에 보여줄 개수
- page_count: 한번에 보여줄 페이지네이션 개수
- sort_index: 정렬 기준 값
- order_type: 정렬 타입
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
MODULE ROOT/myboard.view.php 파일 수정
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda
4d9a88511dcf6644d9dc7f84#file-myboard-view-php-L86
documentModel::getDocumentList()
- document 목록을 가져오는 메소드
$output
- document 목록 반환 값
- data: documentItem의 배열
- total_count: 해당 모듈의 총 document 개수
- total_page: list_count에 따른 총 페이지 개수
- page: 현재 페이지 값
- page_navigation: 페이지 표시에 사용할 PageHandler
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
MODULE ROOT/skins/default/List.html 파일 생성
loop 속성
- 해당 엘리먼트를 반복 출력할 때 사용
- array_expression => $no, $val 형태로 사용
foreach (array_expression as $no => $val) 와 동일
https://gist.github.
com/flyskyko/b7a02263d92f74da1f16/1f7b7d60857b2734dcc861
484d6c984950531bf1
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
MODULE ROOT/skins/default/List.html 파일 생성
loop 속성
- 해당 엘리먼트를 반복 출력할 때 사용
- expression 형태로 사용
while (expression) 과 동일
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88
511dcf6644d9dc7f84#file-myboard-view-php-L86
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
MODULE ROOT/skins/default/List.html 파일 생성
https://gist.github.
com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88
511dcf6644d9dc7f84#file-myboard-view-php-L86
PageHandler::getNextPage()
- 다음 페이지 번호를 반환하는 메소드
- 호출하면 내부 인덱스가 하나 증가
- 다음 페이지가 없으면 0 반환
PageHandler 변수
- total_count
- total_page
- cur_page
- page_count
- first_page
- last_page
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
글 목록 화면 만들기
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
정리
- XE 구조
- XE는 OS, 웹서버, PHP, DBMS 스택 위에서 실행되는 프레임워크
- XE Controll Path
- Context 초기화 - 실행 모듈 결정 - 모듈 실행 - 결과 출력
- 모듈 구조
- conf, lang, skins 등 폴더 구조
- myboard.class.php, myboard.view.php 등 파일 명명 규칙
- module.xml
- grant, permission, action
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
정리
- 모듈 제작
- 사이트 메뉴 편집에 메뉴 타입으로 추가하는 방법
- 개별 모듈의 설정을 저장하고 가져오는 방법
- module.xml에 액션을 추가하고 로직을 추가하는 방법
- myboard, myboardView 등 클래스 명명 규칙
- dispMyboardWrite 등 액션 명명 규칙
- 다국어 지원 방법
- 트리거
- 트리거 등록
- 트리거 제거
- 템플릿
- Context::set()
- TemplateHandler::compile()
- <include>, cond, loop
5월 XE 오픈 세미나
XE 모듈 개발 걸음마부터 날기까지 - 걷기
한번 해보세요
- 작성한 글의 수정/삭제 기능을 만들어 보세요
- Comment 모듈을 사용하여 댓글 기능을 개발해보세요

More Related Content

What's hot

TestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKETestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKEAbhishek Yadav
 
Introduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkIntroduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkBugRaptors
 
TestNG Annotations in Selenium | Edureka
TestNG Annotations in Selenium | EdurekaTestNG Annotations in Selenium | Edureka
TestNG Annotations in Selenium | EdurekaEdureka!
 
Html5 and-css3-overview
Html5 and-css3-overviewHtml5 and-css3-overview
Html5 and-css3-overviewJacob Nelson
 
Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Edureka!
 
Cucumber With Selenium
Cucumber With SeleniumCucumber With Selenium
Cucumber With SeleniumVishwanath KC
 
Develop advance joomla! MVC Component for version 3
Develop advance joomla! MVC Component for version 3Develop advance joomla! MVC Component for version 3
Develop advance joomla! MVC Component for version 3Gunjan Patel
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스철민 신
 
Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Gunjan Patel
 
Test automation using selenium
Test automation using seleniumTest automation using selenium
Test automation using seleniumshreyas JC
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentationJohn Slick
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
BEM it! Introduction to BEM
BEM it! Introduction to BEMBEM it! Introduction to BEM
BEM it! Introduction to BEMVarya Stepanova
 

What's hot (20)

TestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKETestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKE
 
Introduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit frameworkIntroduction of TestNG framework and its benefits over Junit framework
Introduction of TestNG framework and its benefits over Junit framework
 
TestNG Annotations in Selenium | Edureka
TestNG Annotations in Selenium | EdurekaTestNG Annotations in Selenium | Edureka
TestNG Annotations in Selenium | Edureka
 
Html5 and-css3-overview
Html5 and-css3-overviewHtml5 and-css3-overview
Html5 and-css3-overview
 
Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium
 
Cucumber With Selenium
Cucumber With SeleniumCucumber With Selenium
Cucumber With Selenium
 
Develop advance joomla! MVC Component for version 3
Develop advance joomla! MVC Component for version 3Develop advance joomla! MVC Component for version 3
Develop advance joomla! MVC Component for version 3
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스[AUG]개발자와 QA가 상생하는 테스트 프로세스
[AUG]개발자와 QA가 상생하는 테스트 프로세스
 
Selenium-Locators
Selenium-LocatorsSelenium-Locators
Selenium-Locators
 
Struts notes
Struts notesStruts notes
Struts notes
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
 
Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3Develop Basic joomla! MVC component for version 3
Develop Basic joomla! MVC component for version 3
 
ASP.NET Basics
ASP.NET Basics ASP.NET Basics
ASP.NET Basics
 
Test automation using selenium
Test automation using seleniumTest automation using selenium
Test automation using selenium
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentation
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
HTML5 Media Elements
HTML5 Media ElementsHTML5 Media Elements
HTML5 Media Elements
 
BEM it! Introduction to BEM
BEM it! Introduction to BEMBEM it! Introduction to BEM
BEM it! Introduction to BEM
 

Similar to XE 모듈 개발 - 걸음마부터 날기까지 - 걷기

XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기승엽 신
 
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기XpressEngine
 
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기XpressEngine
 
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기승엽 신
 
XE Open seminar 테마만들기
XE Open seminar 테마만들기XE Open seminar 테마만들기
XE Open seminar 테마만들기Sungbum Hong
 
Python3 6장 모듈만들기
Python3 6장 모듈만들기Python3 6장 모듈만들기
Python3 6장 모듈만들기Jihoon Kong
 
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XpressEngine
 
오픈세미나 플러그인만들기
오픈세미나 플러그인만들기오픈세미나 플러그인만들기
오픈세미나 플러그인만들기승훈 오
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)Sol Kim
 
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"XpressEngine
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Dong Chan Shin
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322jylee6977
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XpressEngine
 
워드프레스 For 플러그인
워드프레스 For 플러그인워드프레스 For 플러그인
워드프레스 For 플러그인082net
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
RHEL8 Kernel Management Manual in Korean
RHEL8 Kernel Management Manual in KoreanRHEL8 Kernel Management Manual in Korean
RHEL8 Kernel Management Manual in KoreanJun Hee Shin
 
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기경원 홍
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 

Similar to XE 모듈 개발 - 걸음마부터 날기까지 - 걷기 (20)

XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기XE 모듈 개발 - 걸음마부터 날기까지 - 날기
XE 모듈 개발 - 걸음마부터 날기까지 - 날기
 
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 날기
 
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기
XE 오픈 세미나(2014 05) - XE 모듈 강의 - 달리기
 
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
XE 모듈 개발 - 걸음마부터 날기까지 - 달리기
 
XE Open seminar 테마만들기
XE Open seminar 테마만들기XE Open seminar 테마만들기
XE Open seminar 테마만들기
 
Xe hack
Xe hackXe hack
Xe hack
 
Python3 6장 모듈만들기
Python3 6장 모듈만들기Python3 6장 모듈만들기
Python3 6장 모듈만들기
 
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
XECon2015 :: [2-3] 홍성범 - XE3 Theme 제작 소개
 
오픈세미나 플러그인만들기
오픈세미나 플러그인만들기오픈세미나 플러그인만들기
오픈세미나 플러그인만들기
 
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
2014년 03월 XE세미나 XE 애드온 개발 강좌(1/2)
 
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
 
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기Project anarchy로 3d 게임 만들기 part_2_vforge피하기
Project anarchy로 3d 게임 만들기 part_2_vforge피하기
 
[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322[KGIT_EWD]class03 0322
[KGIT_EWD]class03 0322
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
워드프레스 For 플러그인
워드프레스 For 플러그인워드프레스 For 플러그인
워드프레스 For 플러그인
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
RHEL8 Kernel Management Manual in Korean
RHEL8 Kernel Management Manual in KoreanRHEL8 Kernel Management Manual in Korean
RHEL8 Kernel Management Manual in Korean
 
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기
XECon PHPFest 2014 - 쉽고 강력한 XE 웹사이트 만들기
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
Eclipse RCP 1/2
Eclipse RCP 1/2Eclipse RCP 1/2
Eclipse RCP 1/2
 

XE 모듈 개발 - 걸음마부터 날기까지 - 걷기

  • 1. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE 모듈 개발 걸음마부터 날기까지 걷기
  • 2. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 소개 신승엽 (난다날아) NHN Entertainment ● SocialXE 개발 ● XE Core 개발 (2011.7 ~ 2013.6)
  • 3. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 이 강의는... 걸음마 - 개발환경 구축, XE 설치 걷기 - XE 모듈 개념, 간단한 모듈 개발 달리기 - 개발한 모듈 발전 시키기 날기 - 고급 주제
  • 4. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE 구조 OS, 웹서버 등 플랫폼 스택 위에 XE Core가 위치 하며 모듈, 애드온, 위젯과 같은 구성요소가 XE core를 통해 실행되는 구조 운영체제 웹서버 PHP DBMS XE core 애드온 모듈위젯 레이아웃 모듈 스킨 레이아웃
  • 5. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE Control Path Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 Context 사전적 의미: 맥락, 문맥 XE에서는: XE 구동에 필요한 여러 정보를 담고 조작할 수 있는 클래스 초기화 요청/응답 유형(GET, POST, XML, JSON) 요청 파라미터/업로드 파일 DB 초기화 언어 인증 정보
  • 6. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE Control Path Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 ModuleHandler 모듈을 선택하고 실행하기 위한 클래스 실행 모듈 결정 module, mid, act, document_srl, module_srl 등 파라미터 정보를 기반으 로 모듈과 클래스(controller, view, model)를 결정 module.xml 모든 모듈이 가지고 있어야 할 파일로 모듈의 퍼미션, 액션, 룰셋 정보를 가지고 있음
  • 7. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE Control Path Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 모듈 실행 퍼미션 체크, 룰셋 체크 후 모듈 실행 모듈 실행 시 Context의 정보를 이용하며 화면에 보여주고 싶은 정보 또한 Context에 세팅 출력 형식도 결정 지을 수 있음 ModuleObject 모든 모듈 클래스가 상속 받는 상위 클래스 ModuleHandler::procModule() ModuleObject::proc()
  • 8. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE Control Path Context 초기화 실행 모듈 결정 모듈 실행 결과 출력 결과 출력 현재 모듈의 레이아웃/메뉴 정보 Context에 세팅 Context에 설정된 출력 형식에 따라 적합한 DisplayHandler를 선택한 후 결과를 출력 DisplayHandler XE 실행 결과를 출력하기 위한 클래스 HTML/XML/JSON 출력이 가능 ModuleHandler::displayContent() DisplayHandler::printContent()
  • 9. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조
  • 10. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 conf: 모듈 설명, 액션 권한 설정을 포함한 폴더 info.xml: 모듈 제작자 정보와 설명 module.xml: 모듈 동작과 관련한 정보
  • 11. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 lang: 모듈에서 사용하는 언어 파일을 포함한 폴더 lang.xml: 언어 파일
  • 12. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 m.skins: 모바일 스킨을 포함하는 폴더 skin.xml: 스킨 정보와 설정 등을 담은 파일 - 그외 파일과 폴더는 자유롭게 구성할 수 있으며 관습적으로 css, img(images), js 등의 폴더로 구성
  • 13. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 queries: DB 조작을 위한 쿼리 파일을 담은 폴더 *.xml: 쿼리 xml 파일 - XE가 여러 DBMS를 지원할 수 있는 이유는 쿼리를 추상화하여 xml로 표현하기 때문
  • 14. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 ruleset: 유효성 검사를 위한 룰셋을 담은 폴더 *.xml: 룰셋 xml 파일 - 룰셋은 유효성 검사를 위한 규칙들을 정의한 것 - 프론트엔트에서 js를 이용한 검사 뿐 아니라 모듈 액션 구동 단계에서도 룰셋을 적용할 수 있음 - 프론트엔트 유효성 검사는 사용자 편의로 생각하고 무조건 서버 측 유효성 검사가 수행되어야 함.
  • 15. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 skins: PC 스킨을 담은 폴더 skin.xml: 스킨 정보, 설정 등을 담은 파일
  • 16. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 tpl: 템플릿 파일을 담은 폴더 - 주로 관리자 페이지의 View를 위한 템플릿 - 특별한 경우 스킨과 상관없이 동일한 템플릿도 사 용
  • 17. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구조 [NAME].class.php: 모듈의 최상위 클래스 [NAME].admin.controller.php: 관리자 컨트롤러 클래스 [NAME].admin.model.php: 관리자 모델 클래스 [NAME].admin.view.php: 관리자 뷰 클래스 [NAME].controller.php: 컨트롤러 클래스 [NAME].model.php: 모델 클래스 [NAME].view.php: 뷰 클래스 [NAME].mobile.php: 모바일 페이지 제공을 위한 클래스 [NAME].wap.php: WAP 페이지 제공을 위한 클래스(스마트폰 시대에 필요치 않음) [NAME].api.php: API 제공을 위한 클래스 - MVC 모델 본래의 의미와는 약간 다른 형태 - Model: get 계열 메소드 - View: 출력(disp) 계열 메소드 - Controller: insert/modify/delete 계열 메소드
  • 18. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 손 안 대고 코 풀기 - Document, Comment 모듈 Document/Comment 모듈: XE에서 만들어지는 모든 "문서/댓글"을 관리하기 위한 모듈 모듈 제작 시에 자체적으로 DB 스키마를 정의하여 데이터를 저장할 수도 있겠지만 Document/Comment 모듈을 사용하 면 한 곳에서 통합 관리할 수 있고 최신글(댓글) 위젯 등에서도 우리가 만든 모듈의 글(댓글)을 아무런 수정 없이 사용할 수 있음
  • 19. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 구상 목표: XE의 기본 요소들을 활용하는 간단한 모듈을 제작 요구사항 - Document, Comment 모듈 사용 - 사이트 메뉴 편집과 호환
  • 20. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 나의 게시판 목록 보기 내용 보기 글 쓰기 댓글 쓰기 사이트 메뉴 편집을 통해 추가/설정
  • 21. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 폴더 생성 XE ROOT/modules/myboard 폴더 생성
  • 22. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 info.xml 생성 https://gist.github.com/flyskyko/47a688edfdda468e3300 MODULE ROOT/conf/info.xml 파일 생성
  • 23. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 module.xml 생성 https://gist.github. com/flyskyko/19eebce5aa13e0b71209/1988b45cc99a10c6025b02300 ae7923fea2b5f06 MODULE ROOT/conf/module.xml 파일 생성 module.xml - 모듈 동작에 관한 정보를 가진 파일 <grants> - 권한 관련 정보 <permissions> - 액션 실행 퍼미션 관련 정보 <actions> - 모듈이 가진 액션 관련 정보
  • 24. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 myboard.class.php 생성 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/f73b95dccc278f59 1a533557a50e63603aa696f5 MODULE ROOT/myboard.class.php 파일 생성 [MODULENAME].class.php - XE의 모든 모듈 class 파일은 ModuleObject를 상속받아야 함 [MODULENAME]::moduleInstall() - XE 초기 설치/쉬운설치 시에 호출 됨 [MODULENAME]::checkUpdate() - 모듈 업데이트 여부를 체크하기 위해 호출 됨 [MODULENAME]:: moduleUpdate() - 모듈 업데이트 시 호출 됨 [MODULENAME]::moduleUninstall() - 모듈 삭제 시 호출 됨 - 모듈이 쉬운 설치에 올라가 있을 때만 삭제가 가능
  • 25. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 menu.getModuleListInSitemap after 트리거를 등록하여 모듈명을 파라미터로 받은 배열에 추가해 주면 메뉴 타 입으로 등록 됨 트리거: 특정 액션 이전이나 이후 어떠한 동작을 하고 싶 을 때 사용할 수 있음 예) 글 작성 완료 시 포인트 차감 글 삭제 시 관련된 데이터DB에서 삭제
  • 26. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정 트리거 등록을 위한 $triggers 멤버 변수 추가 - 트리거 정보를 가진 배열의 배열 - name: 사용할 트리거 이름 - module: 트리거 발생 시 실행할 모듈 이름 - type: 메소드가 포함된 클래스 타입 - func: 트리거 발생 시 실행할 메소드 이름 - position: 해당 트리거 이전/이후 실행인지 여부 ※ before 혹은 after만 가진 트리거 존 재 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191 254b9676259fcfc71
  • 27. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정 moduleInstall() 메소드에 트리거 등록 추가 - 멤버 변수 $triggers 배열을 순회하면서 트리거를 등록 - XE 설치 시에 우리 모듈이 modules 안에 존재한 다면 이 메소드가 실행 ModuleController - 모듈과 관련된 조작 메소드를 가지고 있음 ModuleController::insertTrigger() - 트리거를 등록하는 메소드 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191 254b9676259fcfc71
  • 28. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정 checkUpdate() 메소드에 트리거 확인 추가 - $triggers를 순회하며 등록되었는지 확인 - 등록되지 않았다면 true를 반환하여 관리자 페이 지에 모듈 업데이트가 나오도록 함 ModuleModel - 모듈과 관련된 get 계열 메소드를 가지고 있음 ModuleModel::getTrigger() - 트리거 정보를 받는 메소드 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191 254b9676259fcfc71
  • 29. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정 moduleUpdate() 메소드에 트리거 등록 추가 - $triggers를 순회하며 등록되었는지 확인한 후 안 되어 있다면 등록 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191 254b9676259fcfc71
  • 30. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.class.php 파일 수정 moduleUninstall() 메소드에 트리거 제거 추가 - $triggers를 순회하며 트리거를 제거 - 우리 모듈이 쉬운설치에 올라가 있다면 이 메소드 를 통해 모듈을 삭제할 수 있음 ModuleController::deleteTrigger() - 트리거를 제거하는 메소드 https://gist.github. com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191 254b9676259fcfc71
  • 31. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 MODULE ROOT/myboard.model.php 파일 생성 [MODULENAME]Model - 해당 모듈의 get 관련 메소드를 가진 클래스 - 해당 모듈 클래스를 상속 받아야 함 triggerModuleListInSitemap() - 메뉴 타입으로 나오게 하기 위한 메소드 - myboard 클래스에서 menu. getModuleListInSitemap 트리거에 이 메소드를 등 록했기 때문에 해당 트리거 발생 시 이 메소드가 호 출 됨 - 파라미터는 메뉴 타입으로 나올 수 있는 모듈 이 름을 담은 배열로 반드시 레퍼런스 타입으로 받은 후 배열에 모듈 이름을 추가해 주어야 함 https://gist.github. com/flyskyko/71da75de329c2ce9a136/375c6f125e223c1b3a3392 d753c3ef10401024ed
  • 32. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 클래스 이름 규칙 규칙에 맞게 클래스 이름을 사용하여야 XE가 액션을 제대로 실행할 수 있음 파일명 모듈명 Admin 타입 결과 상위클래스 myboard.class.php myboard myboard ModuleObject myboard.admin.controller.php Admin Controller myboardAdminController myboard myboard.admin.model.php Model myboardAdminModel myboard.admin.view.php View myboardAdminView myboard.controller.php Controller myboardController myboard.model.php Model myboardModel myboard.view.php View myboardView
  • 33. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 myboard.class.php 파일을 수정한 후 관리자 페이 지로 접속하면 모듈 업데이트가 표시 됨 업데이트 후 사이트 메뉴 편집으로 접속한 후 메뉴 추가를 눌러 보면 '나의 게시판'이 추가된 것을 확인할 수 있음
  • 34. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 메뉴 타입으로 등록 이제 메뉴 타입으로 등록되었으니 '나의 게시판' 메뉴를 하나 추가해 보세요. 물론 아직 되는 것은 하나도 없습니다.
  • 35. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 권한 설정 만들기 모듈 구상 시에 생각했던 기능들에 대한 권한을 설정할 수 있도록 해봅시다. 목록 보기 권한 내용 보기 권한 글 쓰기 권한 댓글 쓰기 권한
  • 36. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 권한 설정 만들기 MODULE ROOT/conf/module.xml 파일 수정 <grant> - 권한 설정 정보를 가진 노드 - name: 코드에서 사용할 이름 - default: 기본 권한 설정 guest: 모든 사용자 member: 로그인 사용자 manager: 관리자 <title> - 권한 설정 화면에 표시될 이름 나머지는 XE가 다 알아서... https://gist.github. com/flyskyko/19eebce5aa13e0b71209/2d301e5f3ce0e6931f98f0c 8198ba06dfec17625
  • 37. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 권한 설정 만들기
  • 38. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 사이트 메뉴 편집에서 간단하게 모듈에 대한 설정이 가능한 simple setup을 만 들어 봅니다. 게시판 상단에 표시할 게시판 제목 설정을 만들어 봅니다.
  • 39. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/conf/module.xml 파일 수정 https://gist.github. com/flyskyko/19eebce5aa13e0b71209/02981f3dffca5b1c472bc7a 3fb510f6d9003943c <action> - 프론트엔드에서 요청할 수 있는 모듈의 특정 액션 에 대한 정보 - name: 액션 이름 - type: 액션 메소드가 포함된 클래스 타입 - simple_setup_index: 이 속성이 true인 액션을 simple setup용으로 사용하며 응답은 설정을 위한 HTML 마크업 <permisson> - 액션에 적용할 퍼미션 정보 - action: 액션 이름 - target: 적용할 퍼미션 - 퍼미션은 권한과는 다른 개념으로 해당 액션에 필 요한 최소한의 '권한'으로 이해 - 퍼미션은 액션 실행 전 XE에 의해 체크 됨 - guest, member, manager
  • 40. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 액션 이름 규칙 규칙에 맞게 액션 이름을 사용하여야 XE가 액션을 제대로 실행할 수 있음 클래스 접두어 모듈명 Admin 액션 결과 myboardAdminController proc Myboard Admin Blahblah procMyboardAdminBlahblah myboardAdminModel get getMyboardAdminBlahblah myboardAdminView disp dispMyboardAdminBlahblah myboardController proc procMyboardBlahblah myboardModel get getMyboardBlahblah myboardView disp dispMyboardBlahblah
  • 41. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/myboard.admin.model.php 파일 생 성 모듈 정보, 모듈 설정을 가져와서 템플릿에서 사용할 수 있도록 세팅하고 템플릿을 컴파일한 결과를 반환! https://gist.github. com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d 9fdcf225d8a3f96383
  • 42. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/myboard.admin.model.php 파일 생 성 getMyboardAdminSimpleSetup() - simple setup 화면을 위한 HTML 마크업을 반환하는 메소드 - $moduleSrl: 해당 모듈의 번호 - $setupUrl: 자체 관리자 화면 URL ModuleModel::getModuleInfoByModuleSrl() - 모듈 번호에 해당하는 모듈의 정보를 반환하는 메소 드 ModuleModel::getModulePartConfig() - 모듈 이름과 모듈 번호로 해당 모듈의 설정 정보를 반 환하는 메소드 https://gist.github. com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d 9fdcf225d8a3f96383
  • 43. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/myboard.admin.model.php 파일 생 성 Context::set() - 변수명, 변수값으로 템플릿에서 사용할 변수를 세팅 할 수 있는 메소드 TemplateHandler - 템플릿을 다루기 위한 클래스 TemplateHandler::getInstance() - 템플릿 핸들러를 얻기 위한 메소드 TemplateHandler::compile() - 특정 템플릿 파일을 컴파일한 결과를 반환하는 메소 드 https://gist.github. com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d 9fdcf225d8a3f96383
  • 44. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 템플릿 출력 내용을 미리 준비해 두고 필요한 부분만 대치하여 사용 메일 머지 기능 아세요? NAME DATE 신승엽 4월 23일 홍경원 8월 14일 김예솔 1월 10일 신승엽님의 생일을 축하드립니다. 4월 23일에 태어난 신승엽님! 생일 을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... 홍경원님의 생일을 축하드립니 8월 14일에 태어난 홍경원님! 생 을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택.. 김예솔님의 생일을 축하드립니다. 1월 10일에 태어난 김예솔님! 생일 을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택... 미리 준비된 내용 Data 결과 머지 [NAME]님의 생일을 축하드립니다. [DATE]에 태어난 [NAME]님! 생일 을 진심으로 축하드립니다. 생일이신 회원님을 위한 혜택...
  • 45. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 템플릿 - 미리 준비된 내용: 템플릿 - Data: Context에 세팅된 변수 - 머지: 템플릿 컴파일 템플릿 Context Data 결과 컴파일
  • 46. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/tpl/simple_setup.html 파일 생성 https://gist.github. com/flyskyko/0b767c6740af5a680b6c/c46e42a9337dcf7865507bc e6e768c82370d81ea <form> - 설정을 전송할 form - module_srl: 설정을 저장할 모듈의 번호 - act: 실행할 액션명 {$varname} - 변수를 출력하기 위한 XE 템플릿 문법 {$lang->varname} - $lang: 언어 변수 - 현재 언어에 맞는 언어 변수의 값 - XE에서 알아서 언어 변수를 세팅 함
  • 47. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/lang/lang.xml 파일 생성 https://gist.github. com/flyskyko/1d332fdef26786b55340/e4ebdcdf635261c1eb360ab c03d36fd9cc7d924b <lang> - lang.xml은 lang 노드로 시작 <item> - 하나의 언어 변수를 나타내는 노드 - name: 언어 변수 이름 <value> - 변수의 값
  • 48. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기 MODULE ROOT/myboard.admin.controller.php 파 일 생성 $moduleInfo 체크 - 파라미터로 들어온 module_srl에 해당하는 모듈이 우리 모듈인지 반드시 체크 moduleController::insertModulePartConfig - 개별 모듈에 대한 설정을 저장하는 메소드 https://gist.github. com/flyskyko/b85488d4585f9d27585b/66cfc62e3a9a4e63bc3ca04 47c1821d1fcd6f537
  • 49. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 모듈 설정 만들기
  • 50. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 MODULE ROOT/conf/module.xml 파일 수정 https://gist.github. com/flyskyko/19eebce5aa13e0b71209/246055e2c4b7cbdf981f90 3b40d8857fc3021d4c standalone 속성 - 해당 액션이 반드시 mid 파라미터를 가지고 실행되어야 할 경우 false로 세팅 - 이 속성을 사용하지 않으면 보안 문제가 생길 수 있음
  • 51. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 MODULE ROOT/myboard.view.php 파일 생성 https://gist.github. com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6 4d57a6192450a0d54e init() - XE가 제일 먼저 실행시켜주는 메소드 ModuleObject::setTemplatePath() - 템플릿 경로를 세팅하는 메소드 ModuleObject::setTemplateFile() - 템플릿 파일을 세팅하는 메소드 템플릿 - 액션을 통해 실행할 경우 경로와 파일 만 지정하면 XE가 템플릿을 컴파일하 며 결과를 보여 줌
  • 52. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 init()에서 템플릿 지정 방식 - 액션 이름에서 공통인 ‘dispMyboard’ 를 제외하고 템플릿 파일명으로 사용 - dispMyboardWrite라면 Write - 이렇게 하면 매 액션에서 템플릿파일 을 따로 지정하지 않아도 됨 dispMyboardWrite() - 글 쓰기 화면을 보여주는 메소드 - 권한만 체크하고 따로 하는 것을 없음 MODULE ROOT/myboard.view.php 파일 생성 https://gist.github. com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6 4d57a6192450a0d54e
  • 53. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 MODULE ROOT/myboard.view.php 파일 생성 https://gist.github. com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab6 4d57a6192450a0d54e 글 쓰기 화면 만들기 $this->grant - XE에서 권한 설정값을 세팅해 줌 - module.xml의 <grant> 노드의 name 속성을 사용 - permission은 XE가 체크해 주지만 grant는 직접 체크해야 함!
  • 54. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 MODULE ROOT/skins/default/skin.xml 파일 생성 https://gist.github. com/flyskyko/31252636105bd39032ec/dc5f15ef4f1119ce82db752 97e64970d84cb85c3 스킨 - skins 폴더 아래에 스킨 위치 - 기본 스킨 폴더명은 무조건 default
  • 55. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 MODULE ROOT/skins/default/_head.html 파일 생성 https://gist.github. com/flyskyko/22f8034dad3af708edc5/70894ba8d9b6756e725688 d0f84fb15acc610cac {$config->title} - 좀 전에 만든 모듈 설정에서 게시판 제목을 표 시해 줌
  • 56. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 MODULE ROOT/skins/default/Write.html 파일 생성 https://gist.github. com/flyskyko/e6e0eecf3cd49a10dfcc/45e3ff0450ea87d7685404de 05a6df92bf1f8cb2 <include> - 현재 위치에 다른 템플릿을 삽입 <block> - XE 템플릿에서만 사용되는 가상 엘리먼트 cond 속성 - 엘리먼트 속성으로 사용하면 조건에 맞을 경 우에만 엘리먼트가 표시 됨 $logged_info - 로그인 정보 - XE가 기본적으로 세팅해주는 변수
  • 57. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 화면 만들기 http://localhost/xe/?mid=myboard&act=dispMyboardWrite
  • 58. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 처리 만들기 MODULE ROOT/conf/module.xml 파일 수정 https://gist.github. com/flyskyko/19eebce5aa13e0b71209/3e61f534eb4003c7372771 e98ab0c98574bc1ff5
  • 59. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 처리 만들기 MODULE ROOT/myboard.controller.php 파일 생성 https://gist.github. com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b7 1510b4c419470c655b $args - document 등록을 위한 파라미터 documentController - document와 관련된 조작 메소드를 가지고 있음 documentController::insertDocument() - document를 등록한다
  • 60. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 처리 만들기 MODULE ROOT/myboard.controller.php 파일 생성 https://gist.github. com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b7 1510b4c419470c655b getNotEncodedUrl() - url encode 되지 않은 url을 만드는 함수 - 글쓰기 성공 시 글 보기 화면으로 이동 시키기 위해 http 302 header를 사용할 것이므로 url encode 되지 않은 url을 사용 함 ModuleObject::setRedirectUrl() - 모듈 실행이 종료된 후 다른 url로 사용자를 redirect 시키는 메소드
  • 61. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 쓰기 처리 만들기 글 작성을 해보면 document_srl이 붙은 url로 이동하는 것을 확인할 수 있습니다. 물론 아직은 글 보기 화면이 없기 때문에 404 에러가 나옵니다. http://localhost/xe/?mid=myboard&act=dispMyboardWrite
  • 62. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/conf/module.xml 파일 수정 https://gist.github. com/flyskyko/19eebce5aa13e0b71209/3b3b44837d97663f3a4114 c0f5ad83fa6d466699 index 속성 - 모듈의 기본 view를 세팅하는 속성 - act 값이 없어도 해당 모듈에 접속 시 index 속성이 있는 액션이 실행 됨
  • 63. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88 511dcf6644d9dc7f84#file-myboard-view-php-L30 dispMyboardContent() - mid=[mid]&document_srl=[document_srl] 혹은 mid=[mid]의 형태 로 접속할 수 있기 때문에 하나의 액션에서 document_srl 유무에 따라 글 보기 혹은 목록 보기로 분기 하도록 구성
  • 64. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9 a88511dcf6644d9dc7f84#file-myboard-view-php-L47 viewDocument() - 글 보기 화면을 보여주는 메소드 - 외부에 공개될 필요가 없기 때문에 private로 지정 documentModel - document와 관련된 get 메소드를 가지고 있음 documentModel::getDocument() - document을 가져오는 메소드 - 반환 값은 documentItem
  • 65. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9 a88511dcf6644d9dc7f84#file-myboard-view-php-L47 documentItem::isExists() - 존재하는 document인지 반환하는 메소드 documentItem::setGrant() - 현재 사용자에게 document의 모든 권한을 주는 메소드 documentItem::updateReadedCount() - document의 조회수를 증가 시키는 메소드
  • 66. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9 a88511dcf6644d9dc7f84#file-myboard-view-php-L47 Context::addBrowserTitle() - 현재 브라우저 제목에 추가로 문자열을 더하는 메소드 - [현재 제목] - [추가된 제목] 형태 $this->setTemplateFile(‘View’) - init()에서 액션 이름에 따라 자동으로 템플릿 파일을 지정하도 록 했지만 글 보기, 목록 보기 모두 액션 이름이 동일하기 때문에 예외적으로 직접 템플릿 파일을 지정
  • 67. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/skins/default/View.html 파일 생성 documentItem::getTitle() - document의 제목을 가져오는 메소드 documentItem::getRegdate() - document의 등록 시간을 가져오는 메소드 documentItem::getNickName() - document의 글쓴이 이름을 가져오는 메소드 documentItem::getContent() - document의 내용을 가져오는 메소드 https://gist.github. com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081 7cf09ce05996684ed1
  • 68. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/skins/default/View.html 파일 생성 Object - XE의 모든 클래스의 최상위 클래스 Object::get() - add(), get() 메소드를 통해 데이터를 오브젝트에 저장할 수 있 음 $oDocument->get(‘readed_count’) - document 오브젝트에 저장된 readed_count을 가져오는 것 - Document 모듈에서 documentIteam 생성 시 필요한 데이터들 을 세팅 함 https://gist.github. com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081 7cf09ce05996684ed1
  • 69. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기 MODULE ROOT/skins/default/View.html 파일 생성 getUrl() - url encode된 url을 만드는 함수 - html에 사용할 때는 url을 url encode하는 것이 표준 https://gist.github. com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee4081 7cf09ce05996684ed1
  • 70. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 보기 화면 만들기
  • 71. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda 4d9a88511dcf6644d9dc7f84#file-myboard-view-php-L86 viewList() - 글 목록을 보여주는 메소드 - 외부에 공개될 필요가 없기 때문에 private로 지정 $args - 글 목록을 가져오기 위한 파라미터 - module_srl: 현재 모듈 번호 - page: 현재 페이지 번호 - list_count: 한 페이지에 보여줄 개수 - page_count: 한번에 보여줄 페이지네이션 개수 - sort_index: 정렬 기준 값 - order_type: 정렬 타입
  • 72. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기 MODULE ROOT/myboard.view.php 파일 수정 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda 4d9a88511dcf6644d9dc7f84#file-myboard-view-php-L86 documentModel::getDocumentList() - document 목록을 가져오는 메소드 $output - document 목록 반환 값 - data: documentItem의 배열 - total_count: 해당 모듈의 총 document 개수 - total_page: list_count에 따른 총 페이지 개수 - page: 현재 페이지 값 - page_navigation: 페이지 표시에 사용할 PageHandler
  • 73. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기 MODULE ROOT/skins/default/List.html 파일 생성 loop 속성 - 해당 엘리먼트를 반복 출력할 때 사용 - array_expression => $no, $val 형태로 사용 foreach (array_expression as $no => $val) 와 동일 https://gist.github. com/flyskyko/b7a02263d92f74da1f16/1f7b7d60857b2734dcc861 484d6c984950531bf1
  • 74. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기 MODULE ROOT/skins/default/List.html 파일 생성 loop 속성 - 해당 엘리먼트를 반복 출력할 때 사용 - expression 형태로 사용 while (expression) 과 동일 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88 511dcf6644d9dc7f84#file-myboard-view-php-L86
  • 75. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기 MODULE ROOT/skins/default/List.html 파일 생성 https://gist.github. com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88 511dcf6644d9dc7f84#file-myboard-view-php-L86 PageHandler::getNextPage() - 다음 페이지 번호를 반환하는 메소드 - 호출하면 내부 인덱스가 하나 증가 - 다음 페이지가 없으면 0 반환 PageHandler 변수 - total_count - total_page - cur_page - page_count - first_page - last_page
  • 76. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 글 목록 화면 만들기
  • 77. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 정리 - XE 구조 - XE는 OS, 웹서버, PHP, DBMS 스택 위에서 실행되는 프레임워크 - XE Controll Path - Context 초기화 - 실행 모듈 결정 - 모듈 실행 - 결과 출력 - 모듈 구조 - conf, lang, skins 등 폴더 구조 - myboard.class.php, myboard.view.php 등 파일 명명 규칙 - module.xml - grant, permission, action
  • 78. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 정리 - 모듈 제작 - 사이트 메뉴 편집에 메뉴 타입으로 추가하는 방법 - 개별 모듈의 설정을 저장하고 가져오는 방법 - module.xml에 액션을 추가하고 로직을 추가하는 방법 - myboard, myboardView 등 클래스 명명 규칙 - dispMyboardWrite 등 액션 명명 규칙 - 다국어 지원 방법 - 트리거 - 트리거 등록 - 트리거 제거 - 템플릿 - Context::set() - TemplateHandler::compile() - <include>, cond, loop
  • 79. 5월 XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 한번 해보세요 - 작성한 글의 수정/삭제 기능을 만들어 보세요 - Comment 모듈을 사용하여 댓글 기능을 개발해보세요