모듈 개발 기초

1. 모듈의 기본 구성

수표 2020. 10. 29. 15:16

example_hoto 모듈

위 파일은 이 글에서 설명한 모듈 생성기를 사용하여 생성한 모듈이다

 

파일 구성을 보면 아래와 같다.

 

/
├ 📁conf    <= 모듈의 기본 정보를 담음
│├ info.xml
│└ module.xml
├ 📁lang    <= 모듈에 사용되는 문자열등을 담음
│└ lang.xml
├ 📁m.skins <= 모바일에서 보여지는 스킨
├ 📁queries <= DB 쿼리등을 담고 있음
├ 📁schemas <= DB 테이블 정보등을 담고 있음
├ 📁skins   <= PC에서 보여지는 스킨
│└ 📁default/...
├ 📁tpl     <= 관리자 화면에서 보여지는 설정 페이지
│└  ...
│
├ example_hoto.admin.controller.php
├ example_hoto.admin.model.php
├ example_hoto.admin.view.php
├ example_hoto.class.php
├ example_hoto.controller.php
├ example_hoto.mobile.php
├ example_hoto.model.php
├ example_hoto.view.php

상당히 XE의 모듈은 정교하게 만들어져있다.

MVC 구조를 기반으로 두고 있기에, 유지보수와 단체 개발이 편리한 점이 장점이다

 

 

 


먼저 파일들을 하나하나 들여다보며, 구조를 설명하겠다

 

- conf/info.xml: 모듈의 기본 정보를 담음

 

 

- conf/module.xml: 모듈의 구성요소를 설정함

 

action: 도메인/?mid=example_hoto&act={action의 name} 형식으로 접속하는것을 정의한다.

 

 

- lang/lang.xml

 

 

모듈에서 사용하는 string을 정의한다.

여러개의 언어를 지원할 수 있도록 만들어져 있다.

 

queries, schemas, skin 관련 기능은 나중에 문서를 따로 만들어 설명하겠다.

 


- example_hoto.class.php

 

기본적으로 XE 모듈은 class를 이용하여 기능들을 분리한다.

 

class Example_hoto extends ModuleObject
{
   ...

보통은 위와 같이 시작한다.

Example_hoto 클래스를 생성하며, ModuleObject 클래스를 상속받았기에, XE Module에서 제공하는 기본적인 함수를 사용할 수 있다.

 

또 트리거라는 개념이 나오게 되는데, 트리거는 아래 글을 참고하자

(참조: https://conory.com/blog/14432)

 

또한 모듈 생성기를 통한 함수들을 살펴보자

public function setConfig($config)

// stdClass형 데이터를 저장할 수 있다
// getConfig를 통해 불러올 수 있다
// DB에 저장되므로 일시적 저장이 아닌 영구적인 저장이다
// 모듈의 설정 데이터를 저장할때 주로 사용된다


public function getConfig()

// 모듈 설정을 가져온다
// setConfig을 통해 저장했던 Object를 그대로 리턴해준다


public function setCache($key, $value, $ttl = 86400, $group_key = null)

// 모듈 캐시를 설정해준다.
// 잘 변하지 않는 거대한 연산이 필요한 데이터를 저장하는데 요긴하다
// value에는 여러가지 타입의 변수가 들어가도 상관 없다


public function getCache($key, $ttl = 86400, $group_key = null)

// 설정한 캐시를 가져온다.


public function deleteCache($key, $group_key = null)

// 특정한 캐시를 제거한다


public function clearCache($group_key = null)

// 전체 캐시를 제거한다


public function createObject($status = 0, $message = 'success' /* $arg1, $arg2 ... */)

// Object를 리턴한다
// Object는 보통 View와 Controller 사이에서 처리결과 등을 리턴해줄때 사용된다
// return $this->createObject(-1,'error'); 와 같이 사용한다


public function checkTriggers()

// 위에 $_insert_triggers, $_delete_triggers에 있는 트리거를 확인한다


public function registerTriggers()

// 트리거를 등록한다




/* Rhymix 기본 함수 */
public function moduleInstall()

// 모듈이 최초 설치 될때 실행되는 함수이다


public function checkUpdate()

// 모듈의 변경사항이 있는지 확인하고, 업데이트 여부를 확인한다.
// true를 리턴하면 업데이트가 필요하다는 것이다.
// 업데이트 필요시, 관리자 대시보드에서 모듈 업데이트가 필요하다는 메세지가 표시된다


public function moduleUpdate()

// 관리자 대시보드에서 '모듈 업데이트' 버튼을 클릭시 실행되는 함수이다
// 여기서 업데이트 작업을 실행해주면 된다


public function recompileCache()

// 캐시파일 재생성시 실행되는 함수이다.

위와 같은 함수들이 있다.

 


 

- example_hoto.view.php

 

사용자들에게 표시되는 view를 위한 파일이다

뭔가 함수이름 중 하나가 익숙하지 않은가?

conf/module.xml 파일을 다시한번 보자 (위에 있음)

 

dispExample_hotoIndex act가 실행시 위에 함수가 실행되게 된다.

이를 위해서 module.xml에 미리 등록을 시켜둔것이다.

만약 module.xml에 act를 등록시켜두지 않거나, view.php에 act 함수를 만들어두지 않는다면 바로 오류를 뿜으며 멈춰버리니, 새로운 act를 등록할때 주의하자.

 

 

init() 함수는 해당 모듈을 불러올때 스킨 폴더를 설정해주는 것이다.

 

그리고 dispExample_hotoIndex 함수 속을 보면 아래 함수가 실행된다

$this->setTemplateFile('index');

이 함수는 템플릿을 설정해주는 함수인데, 현재는 skins/default/index.html을 불러온다.

dispExample_hotoIndex 함수속에서 DB에서 값을 불러와 설정하거나, 변수를 설정해서 템플릿에 전송해줄 수 있지만, 다음 글에서 설명해보겠다.

 


- example_hoto.model.php

 

이 파일은 너무 깔끔하다

Model에서는 보통 DB를 통한 데이터 저장/불러오기 등의 작업을 수행하고 view나 controller에서 사용할 수 있는 함수등을 선언한다.

하지만 지금은 모듈에 특별한 기능이 없기에 Model에도 아무런 함수가 없는것이다.

나중에 채워줄것이므로, 단순히 데이터를 다룬다는 점을 생각하고 넘어가자.

 


- example_hoto.controller.php

 

여기에는 trigger 함수들이 나와있다.

위에 class.php 파일에서 선언한 trigger가 작동하면, 위에 함수가 실행되는것이다.

 

또한 trigger 뿐만 아니라, 백그라운드 작업등을 담당하는데, 예를들어 view에서 form을 통해 데이터를 전달하면 그 데이터는 controller로 전송된다.

사용 방법은 view.php에 설명과 거의 비슷하나, controller에서 사용하는 함수들은 추후 설명하겠다.


admin.view.php, admin.model.php, admin.controller.php 들은 어드민용이라는 점을 제외하면 위에 설명한것과 동일하기에 넘어가겠다.  

 


 

 

이상으로 모듈의 기본구조 설명을 마친다.