79
5XE 오픈 세미나 XE 모듈 개발 걸음마부터 날기까지 - 걷기 XE 모듈 개발 걸음마부터 날기까지 걷기

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

  • Upload
    -

  • View
    3.918

  • Download
    3

Embed Size (px)

DESCRIPTION

걷기 XE 구조 XE Control Path 모듈 구조 모듈 제작 트리거 템플릿 걸음마 - http://www.slideshare.net/flyskykr/xe-1 달리기 - http://www.slideshare.net/flyskykr/xe-35073789

Citation preview

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를 통해 실행되는 구조

운영체제

웹서버

PHPDBMS

XE core

애드온 모듈위젯레이아웃 모듈

스킨 레이아웃

5월 XE 오픈 세미나

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

XE Control PathContext 초기화 실행 모듈 결정 모듈 실행 결과 출력

Context

사전적 의미: 맥락, 문맥

XE에서는: XE 구동에 필요한 여러 정보를 담고 조작할 수 있는 클래스

초기화

요청/응답 유형(GET, POST, XML, JSON)

요청 파라미터/업로드 파일

DB 초기화

언어

인증 정보

5월 XE 오픈 세미나

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

XE Control PathContext 초기화 실행 모듈 결정 모듈 실행 결과 출력

ModuleHandler

모듈을 선택하고 실행하기 위한 클래스

실행 모듈 결정

module, mid, act, document_srl, module_srl 등 파라미터 정보를 기반으로 모듈과 클래스(controller, view, model)를 결정

module.xml

모든 모듈이 가지고 있어야 할 파일로 모듈의 퍼미션, 액션, 룰셋 정보를 가지고 있음

5월 XE 오픈 세미나

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

XE Control PathContext 초기화 실행 모듈 결정 모듈 실행 결과 출력

모듈 실행

퍼미션 체크, 룰셋 체크 후 모듈 실행

모듈 실행 시 Context의 정보를 이용하며 화면에 보여주고 싶은 정보 또한 Context에 세팅

출력 형식도 결정 지을 수 있음

ModuleObject

모든 모듈 클래스가 상속 받는 상위 클래스ModuleHandler::procModule()

ModuleObject::proc()

5월 XE 오픈 세미나

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

XE Control PathContext 초기화 실행 모듈 결정 모듈 실행 결과 출력

결과 출력

현재 모듈의 레이아웃/메뉴 정보 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/1988b45cc99a10c6025b02300ae7923fea2b5f06

MODULE ROOT/conf/module.xml 파일 생성

module.xml- 모듈 동작에 관한 정보를 가진 파일

<grants>- 권한 관련 정보

<permissions>- 액션 실행 퍼미션 관련 정보

<actions>- 모듈이 가진 액션 관련 정보

5월 XE 오픈 세미나

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

myboard.class.php 생성 https://gist.github.com/flyskyko/44bb45d7faec0387fd84/f73b95dccc278f591a533557a50e63603aa696f5

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/e7eeb612fbc2d19f485d191254b9676259fcfc71

5월 XE 오픈 세미나

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

메뉴 타입으로 등록

MODULE ROOT/myboard.class.php 파일 수정

moduleInstall() 메소드에 트리거 등록 추가- 멤버 변수 $triggers 배열을 순회하면서 트리거를 등록

- XE 설치 시에 우리 모듈이 modules 안에 존재한다면 이 메소드가 실행

ModuleController- 모듈과 관련된 조작 메소드를 가지고 있음

ModuleController::insertTrigger()- 트리거를 등록하는 메소드

https://gist.github.com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191254b9676259fcfc71

5월 XE 오픈 세미나

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

메뉴 타입으로 등록

MODULE ROOT/myboard.class.php 파일 수정

checkUpdate() 메소드에 트리거 확인 추가- $triggers를 순회하며 등록되었는지 확인- 등록되지 않았다면 true를 반환하여 관리자 페이지에 모듈 업데이트가 나오도록 함

ModuleModel- 모듈과 관련된 get 계열 메소드를 가지고 있음

ModuleModel::getTrigger()- 트리거 정보를 받는 메소드

https://gist.github.com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191254b9676259fcfc71

5월 XE 오픈 세미나

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

메뉴 타입으로 등록

MODULE ROOT/myboard.class.php 파일 수정

moduleUpdate() 메소드에 트리거 등록 추가- $triggers를 순회하며 등록되었는지 확인한 후 안 되어 있다면 등록

https://gist.github.com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191254b9676259fcfc71

5월 XE 오픈 세미나

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

메뉴 타입으로 등록

MODULE ROOT/myboard.class.php 파일 수정

moduleUninstall() 메소드에 트리거 제거 추가- $triggers를 순회하며 트리거를 제거- 우리 모듈이 쉬운설치에 올라가 있다면 이 메소드를 통해 모듈을 삭제할 수 있음

ModuleController::deleteTrigger()- 트리거를 제거하는 메소드

https://gist.github.com/flyskyko/44bb45d7faec0387fd84/e7eeb612fbc2d19f485d191254b9676259fcfc71

5월 XE 오픈 세미나

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

메뉴 타입으로 등록

MODULE ROOT/myboard.model.php 파일 생성

[MODULENAME]Model- 해당 모듈의 get 관련 메소드를 가진 클래스- 해당 모듈 클래스를 상속 받아야 함

triggerModuleListInSitemap()- 메뉴 타입으로 나오게 하기 위한 메소드- myboard 클래스에서 menu.getModuleListInSitemap 트리거에 이 메소드를 등록했기 때문에 해당 트리거 발생 시 이 메소드가 호출 됨- 파라미터는 메뉴 타입으로 나올 수 있는 모듈 이름을 담은 배열로 반드시 레퍼런스 타입으로 받은 후 배열에 모듈 이름을 추가해 주어야 함

https://gist.github.com/flyskyko/71da75de329c2ce9a136/375c6f125e223c1b3a3392d753c3ef10401024ed

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/2d301e5f3ce0e6931f98f0c8198ba06dfec17625

5월 XE 오픈 세미나

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

권한 설정 만들기

5월 XE 오픈 세미나

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

모듈 설정 만들기

사이트 메뉴 편집에서 간단하게 모듈에 대한 설정이 가능한 simple setup을 만들어 봅니다.

게시판 상단에 표시할 게시판 제목 설정을 만들어 봅니다.

5월 XE 오픈 세미나

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

모듈 설정 만들기

MODULE ROOT/conf/module.xml 파일 수정

https://gist.github.com/flyskyko/19eebce5aa13e0b71209/02981f3dffca5b1c472bc7a3fb510f6d9003943c

<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/848cfa5a5b61d2e5b2132d9fdcf225d8a3f96383

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/848cfa5a5b61d2e5b2132d9fdcf225d8a3f96383

5월 XE 오픈 세미나

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

모듈 설정 만들기

MODULE ROOT/myboard.admin.model.php 파일 생성

Context::set()- 변수명, 변수값으로 템플릿에서 사용할 변수를 세팅할 수 있는 메소드

TemplateHandler- 템플릿을 다루기 위한 클래스

TemplateHandler::getInstance()- 템플릿 핸들러를 얻기 위한 메소드

TemplateHandler::compile()- 특정 템플릿 파일을 컴파일한 결과를 반환하는 메소드

https://gist.github.com/flyskyko/83e0bce855fa74539801/848cfa5a5b61d2e5b2132d9fdcf225d8a3f96383

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/c46e42a9337dcf7865507bce6e768c82370d81ea

<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/e4ebdcdf635261c1eb360abc03d36fd9cc7d924b

<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/66cfc62e3a9a4e63bc3ca0447c1821d1fcd6f537

5월 XE 오픈 세미나

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

모듈 설정 만들기

5월 XE 오픈 세미나

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

글 쓰기 화면 만들기MODULE ROOT/conf/module.xml 파일 수정

https://gist.github.com/flyskyko/19eebce5aa13e0b71209/246055e2c4b7cbdf981f903b40d8857fc3021d4c

standalone 속성- 해당 액션이 반드시 mid 파라미터를 가지고 실행되어야 할 경우 false로 세팅- 이 속성을 사용하지 않으면 보안 문제가 생길 수 있음

5월 XE 오픈 세미나

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

글 쓰기 화면 만들기MODULE ROOT/myboard.view.php 파일 생성

https://gist.github.com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab64d57a6192450a0d54e

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/c4cd6c242e3133122d4ab64d57a6192450a0d54e

5월 XE 오픈 세미나

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

MODULE ROOT/myboard.view.php 파일 생성

https://gist.github.com/flyskyko/20e3243b16a380f2a848/c4cd6c242e3133122d4ab64d57a6192450a0d54e

글 쓰기 화면 만들기

$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/dc5f15ef4f1119ce82db75297e64970d84cb85c3

스킨

- skins 폴더 아래에 스킨 위치- 기본 스킨 폴더명은 무조건 default

5월 XE 오픈 세미나

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

글 쓰기 화면 만들기MODULE ROOT/skins/default/_head.html 파일 생성

https://gist.github.com/flyskyko/22f8034dad3af708edc5/70894ba8d9b6756e725688d0f84fb15acc610cac

{$config->title}- 좀 전에 만든 모듈 설정에서 게시판 제목을 표시해 줌

5월 XE 오픈 세미나

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

글 쓰기 화면 만들기MODULE ROOT/skins/default/Write.html 파일 생성

https://gist.github.com/flyskyko/e6e0eecf3cd49a10dfcc/45e3ff0450ea87d7685404de05a6df92bf1f8cb2

<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/3e61f534eb4003c7372771e98ab0c98574bc1ff5

5월 XE 오픈 세미나

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

글 쓰기 처리 만들기MODULE ROOT/myboard.controller.php 파일 생성

https://gist.github.com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b71510b4c419470c655b

$args- document 등록을 위한 파라미터

documentController- document와 관련된 조작 메소드를 가지고 있음

documentController::insertDocument()- document를 등록한다

5월 XE 오픈 세미나

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

글 쓰기 처리 만들기MODULE ROOT/myboard.controller.php 파일 생성

https://gist.github.com/flyskyko/e9a8b0d121eaac6da226/6fedb8b26d96d346f4a0b71510b4c419470c655b

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/3b3b44837d97663f3a4114c0f5ad83fa6d466699

index 속성- 모듈의 기본 view를 세팅하는 속성- act 값이 없어도 해당 모듈에 접속 시 index 속성이 있는 액션이 실행 됨

5월 XE 오픈 세미나

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

글 보기 화면 만들기MODULE ROOT/myboard.view.php 파일 수정

https://gist.github.com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/0b841f09386a835fee40817cf09ce05996684ed1

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/0b841f09386a835fee40817cf09ce05996684ed1

5월 XE 오픈 세미나

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

글 보기 화면 만들기MODULE ROOT/skins/default/View.html 파일 생성

getUrl()- url encode된 url을 만드는 함수- html에 사용할 때는 url을 url encode하는 것이 표준

https://gist.github.com/flyskyko/e88c4e1cb7b614d988ae/0b841f09386a835fee40817cf09ce05996684ed1

5월 XE 오픈 세미나

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

글 보기 화면 만들기

5월 XE 오픈 세미나

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

글 목록 화면 만들기MODULE ROOT/myboard.view.php 파일 수정

https://gist.github.com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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/1f7b7d60857b2734dcc861484d6c984950531bf1

5월 XE 오픈 세미나

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

글 목록 화면 만들기MODULE ROOT/skins/default/List.html 파일 생성

loop 속성- 해당 엘리먼트를 반복 출력할 때 사용- expression 형태로 사용 while (expression) 과 동일

https://gist.github.com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#file-myboard-view-php-L86

5월 XE 오픈 세미나

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

글 목록 화면 만들기MODULE ROOT/skins/default/List.html 파일 생성

https://gist.github.com/flyskyko/20e3243b16a380f2a848/aa8006068bdd2fda4d9a88511dcf6644d9dc7f84#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 모듈을 사용하여 댓글 기능을 개발해보세요