제로보드XE 기본 구조#
제로보드XE의 ROOT에는 아래와 같이 하나의 파일과 8개의 디렉토리(1개는 설치후 자동생성)가 있습니다.
모든 입출력은 index.php를 통해서 이루어집니다.
files 디렉토리는 설치시 생성되며 업로드되는 파일이나 내부적인 캐시파일, DB및 환경 설정 파일들이 저장됩니다.
디렉토리 구조#
index.php : 제로보드XE index file
classes/ : 기본 클래스 라이브러리들
common/ : 공통 TPL(템플릿), CSS, JS, Images들
config/ : 기본 설정 및 함수들
modules/ : 모듈들
addons/ : 애드온들
layouts/ : 레이아웃들
widgets/ : 위젯들
files/ : 설치후 생성되는 디렉토리, 첨부파일 및 캐싱 파일들
기본 동작 절차#
- index.php : 환경 설정 및 기본 library load, Context 초기화, ModuleHandler를 이용한 모듈 찾기 & 출력
- Context 초기화 (./classes/context/Context.class.php)
- DB및 환경 정보파일인 ./files/config/db.config.php load
- 언어타입 설정 : 쿠키정보로 언어를 결정. 쿠키정보가 없다면 HTTP_ACCEPT_LANGUAGE로 언어 결정 및 쿠키 세팅
- 기본 언어파일 로드 : ./common/lang/*.lang.php 중 언어타입에 맞는 파일을 load
- HTML(GET/POST/FILES) & XML등의 request type지정 및 변수를 set()
- 인증 관련 데이터를 세팅 (is_logged, logged_info)
- rewrite 모듈 사용 상태 체크 및 절대 경로를 구함
- 모듈핸들러 실행 (./classes/module/ModuleHandler.class.php)
- module, act, mid, document_srl에 대한 변수를 찾음 (이 4가지 변수중 하나는 필수. 아무것도 없으면 기본 mid찾음)
- 1번의 변수를 바탕으로 요청된 모듈을 찾아서 module config등의 초기화 실행
- 2번에서 찾아진 $oModule로 권한 및 모듈정보를 설정하고 모듈 실행
- 모듈의 실행 (./classes/module/ModuleObject.class.php의 상속)
- 3-3에서 찾아진 모듈을 바탕으로 호출된 act(Action)에 해당하는 변수를 찾음.
- act는 ./modules/모듈명/conf/module.xml 에 <actions>..</actions>에 정의되어 있음.
- 4.2에 정의된 action이 아닌 경우 action_forward 테이블에서 act값을 바탕으로 module을 찾음. (action forwarding)
- act변수는 (disp|proc)ModuleName(Admin)Act 로 네이밍 됨.
- 모든 action은 type, admin_index, standalone의 값을 가짐
- type : view, controller, model
- admin_index : true|false, 해당 모듈의 관리자 페이지의 index임을 지정
- standalone : true|false, mid없이 단독 실행 가능한지에 대한 설정
- act값에 의해 type이 정해졌으면 아래와 같은 규칙으로 class파일을 찾음
- 서비스 클래스 : ./modules/모듈명/모듈명.{type}.class.php
- 관리자 클래스 : ./modules/모듈명/모듈명.Admin.{type}.class.php
- 관리자 클래스는 act값에 Admin이 포함되어 있을시 사용되며 php파일의 load를 줄이기 위해서 분리
- ModuleHandler::displayContent($oModule)로 모듈에서 실행된 결과를 출력
- Display Class(./classes/display/DisplayHandler.class.php)는 $oModule, 즉 실행이 완료된 모듈객체를 받음
- 출력방식(HTML/XMLRPC)에 따라서 결과를 html 혹은 simple xml로 출력할지를 결정.
추가정보#
- 필수 변수 4가지 : 아래 4가지 변수중 하나는 꼭 호출이 되어야 한다.
- document_srl(문서번호) : 제로보드XE의 모든 문서(document)는 고유한 값(sequence)를 가지고 있으며 이 값으로 문서모듈(document module)을 통해 요청된 문서의 모듈(module)의 값을 구한다.
- mid : 모듈(module)로 생성된 개체의 고유한 이름이며 이를 바탕으로 어떤 모듈을 호출하려는지 찾아낸다.
- act : 모듈(module)의 action 명세서의 등록된 값을 의미하며 view/model/controller에 해당하는 동작을 파악하고 유효한 요청인지에 대해서 검사를 하고 해당 요청을 실행하기 위한 준비를 할 수 있다.
- module : mid(모듈의 개체)가 아닌 모듈 자체를 호출할 수 있다.
- 아무런 변수가 없을 경우 mid중 기본으로 설정된 것을 강제로 호출하게 된다.
- Context의 set/get
- Context는 가장 기본적인 DB및 환경설정부터 템플릿엔진으로의 변수 전달등 ZBXE내에서 모든 정보를 관리하고 있다.
- GET/POST등의 변수는 자동으로 Context::set(key, value)를 통해서 내부 관리를 하게 되고 모듈등에서 setting되는 변수들 역시 동일한 관리가 됨
- php코드에서 Context::set('a', 1234)을 하게 되면 템플릿에서는 {$a} 로 사용 가능
- module, mid, act
- ZBXE에서는 module + act으로 모든 동작이 이루어짐. ("누구(module)"에게 "무엇(act)"을 해라는 의미)
- mid는 module의 instance(객체)로서의 의미를 가짐.
- 특정 module(or mid)에 존재하는 않는 act를 호출하게 되면 action_forward라는 DB 테이블에서 act에 해당하는 module을 찾아서 실행함. 이로 얻게 되는 장점은 특정 module(or mid)의 정보나 레이아웃을 그대로 유지한채 다른 모듈의 display를 연동할 수 있음.
- module의 클래스 파일은 모듈.class.php 1개와 모듈.{Admin|none}.{view|model|controller}.class 6개, 총 7개까지 구성이 되며 불필요한 부분은 생략 가능.
- module의 클래스 파일을 나눈 이유는 목적에 구분하여 trace를 쉽게 하고 인터프리터 언어인 php의 특성상 하나의 파일에 너무 긴 코드가 있음으로 인하여 불필요한 load발생을 줄이기 위함.
- module은 mid를 생성하여 사용할 수 있는 부분과 standalone으로 자체적으로 동작할 수 있는 2가지 동작 모델이 있음. standalone의 경우 통합 환경이나 관리 기능등에서 사용됨.
(9)
(
