모듈
1. 개요
모듈은 가장 핵심이 되는 확장요소입니다. 모듈 없이는 Rb는 동작할 수 없으며, Rb 설치시 시스템 모듈로서 10개 정도의 기본모듈이 포함 되어있습니다. 기본모듈은 시스템 구동에 기초가 되는 모듈로서 삭제할 수 없습니다. 이는 마치 스마트폰에서 기본앱을 삭제할 수 없는 것과 같습니다.
참고 기본모듈 : 사이트,시스템도구,대시보드,큐마켓,모듈,레이아웃,미디어셋,도메인,디바이스,알림,통합검색 등
2. 데이터 흐름

3. 기본경로 및 공통변수
- 모듈의 호출 :
- /(index.php)?r=사이트코드&m=모듈폴더명
- 모듈의 위치 :
$g['path_module']
(ex) ./modules/- 모듈변수 :
$m
- 경로변수 :
-
$g['dir_module']
모듈 폴더까지의 서버 상대경로 (ex) ./modules/모듈폴더/
$g['url_module']
모듈 폴더까지의 URL 경로 (ex) /modules/모듈폴더
4. 기본구조
위의 구조는 일반적인 모듈의 폴더구성이며 폴더명과 파일명은 위의 구조를 따라야 합니다. 이외의 구조는 모듈개발자에 의해서 결정되며 구조샘플은 Rb에 포함되어 있는 기본 모듈들을 참고하세요.
5. 기본모듈 만들기
이 과정은 어떤 샘플도 없는 상태에서 모듈을 개발해 가는 과정을 담고 있습니다. 모듈에 대한 구조파악이 된 후에는 모듈 샘플을 다운로드 받아 개발하면 더 빠르게 개발할 수 있을 것입니다.
5-1. 기본폴더 및 파일 만들기
모듈폴더는 영문 대소문자를 포함하여 폴더명으로 사용가능한 모든 문자(한글제외)를 사용할 수 있으나 가능하면 영문소문자를 권장합니다. 모듈폴더명은 중복되지 않도록 지정해야 합니다. 다음과 같이 폴더와 파일들을 생성합니다.(파일은 반드시 UTF-8로 생성)
이 페이지 하단에 있는 단계별 샘플모듈을 다운로드 받을 수 있으나 샘플모듈을 다운로드 받기 전에 가능한 수차례 모듈 폴더구조를 직접 만들어 보시길 권해드립니다.
몇차례 모듈 폴더와 파일들을 만들어보면 모듈의 구조를 이해하는데 도움이 될 것입니다. 각각의 파일들에 대한 역할을 자세히 숙지하시기 바랍니다.
/mymodule/name.txt - 입력한 명칭이 모듈설치시에 모듈명으로 DB에 기록됩니다.
/mymodule/main.php - 모듈을 호출했을때 실행되는 기본파일입니다.
이 파일(main.php)은 모듈에서 모듈의 구조를 정의하고 제어하는 역할을 하기 때문에 모듈제작시 가장 중요한 파일입니다.
/mymodule/admin.php - 모듈의 관리자페이지 연결을 위한 파일입니다.
특수한 경우가 아니라면 admin.php 는 항상 위와 같은 코드로 구성됩니다. /mymodule/admin/ 폴더내의 관리자페이지 파일들에 공통적으로 적용할 사항이 있을 경우 2라인과 3라인 사이에 기술합니다.
/mymodule/admin/main.php - 모듈의 관리자페이지에 접속시 초기파일입니다.
- 가급적 rb-모듈폴더명 으로 class를 지정하여 css로 접근함
- 관리자페이지 접속시 초기에 접속하는 페이지는 무조건 /mymodule/admin/main.php 이어야 합니다 .
- 만약 관리자페이지 내에서 메뉴를 구분할 경우에는 /mymodule/admin/var/var.menu.php 에서 정의하며 설정된 메뉴들에 대응하는 php 파일을 /mymodule/admin/ 밑에 만들어 주면 자동으로 연결됩니다.
/mymodule/admin/_main.css - 공통 CSS 파일입니다.
/mymodule/var/var.php - 모듈 변수파일입니다. 옵션
5-2. 데이터 전달 및 액션처리
모듈에서 데이터를 가공하거나 DB에 기록하는 등 액션을 처리해야 하는 경우 GET 이나 POST 로 a
파라미터를 이용해 전달합니다.
다음은 각각의 유형별 액션 전달(요청)방법입니다.
주의 항상 $r
파라미터(사이트코드)는 유지해야 합니다.
액션요청은 다음의 경로에 있는 액션파일에 전달됩니다.
액션파일 작성방법
액션파일의 기본 구조는 다음과 같습니다.
알림 보내기
액션을 처리하면서 특수한 경우 알림을 보내야 할 경우가 있습니다. 이때 알림전송 함수를 액션파일에 추가하면 간단히 기능을 구현할 수 있습니다. 참고 알림을 보냈다 하더라도 사용자가 차단할 경우 전달되지 않습니다. 사용법은 주석을 참고하세요.
이메일 보내기
액션을 처리하면서 이메일을 보내려면 다음과 같이 작성합니다.
이메일을 보내기 위해서는 보내는 사람과 받는 사람 그리고 제목/내용이 있어야 합니다.
보내는 사람을 대표이메일(관리자모드 - 시스템 도구 - 환경설정 페이지에서 등록)로 지정하려면 $d['admin']['sysmail']
변수를 사용합니다.
쪽지 보내기
액션을 처리하면서 쪽지를 보내려면 다음과 같이 작성합니다. 쪽지를 받는 회원이 설정을 통해 차단한 경우라면 예외처리합니다.
5-3. 모듈 전용 DB TABLE 생성하기
모듈 개발시 경우에 따라 전용 DB를 이용해야할 경우가 생깁니다. 이때 다음과 같이 DB셋팅용 폴더와 파일을 구성하고 TABLE 관련정보와 스카마를 정의하면 자동으로 테이블이 구성되며 이 모듈은 물론 어떤 모듈에서도 해당 테이블을 사용할 수 있게 됩니다. DB 테이블이 생성되는 예제은 이 페이지 하단에서 샘플모듈에서 다운로드 받으실 수 있습니다.
db.table.php
$table
변수는 반드시 다음과 같은 형식으로 $module
변수를 이용하여 정의해야 합니다.
그래야 변수의 중복을 피할 수 있으며 클론모듈로서도 활용이 가능합니다.
$table
의 갯수는 원하는 만큼 정의할 수 있습니다.
참고 모듈을 설치한 후에는 db.table.php.done으로 파일명이 자동 변경됩니다.
db.schema.php
스키마는 db.table.php 에서 정의한 $table
변수에 대응해서 정의합니다.
이 작업은 DB에 대한 기본지식이 있어야 합니다.
5-4. 모듈 개발자 정보등록
- 모듈 개발자의 정보를 등록하면 관리자 페이지에서 자동으로 링크가 걸립니다.
- /mymodule/var/ 폴더안에 var.moduleinfo.php 를 만든 후 다음과 같이 정의합니다.
- 필요치 않거나 정보를 제공하지 않으려면 파일 자체를 만들지 않아도 됩니다.
- 일부의 정보만 제공하려면 제공하지 않으려는 정보 변수는 공백으로 둡니다.
5-5. 통합검색 제공
모듈의 종류가 콘텐츠를 제공하며 검색페이지를 제공해야 하는 경우라면 모듈폴더안에 for-searching 폴더를 생성합니다. 그리고 그 안에 다음과 같은 형식으로 검색제공용 페이지를 만듭니다. 아래 예제는 Rb 통합검색(search) 모듈내에 포함되어 있으니 참고하세요.
5-6. 관리자 페이지 메뉴
모듈의 관리자페이지가 탭으로 구분되어야 할 경우 모듈폴더/admin/var/ 폴더안에 var.menu.php 를 생성하고 다음과 같이 작성합니다. 각각의 메뉴에 대한 파일은 모듈폴더/admin/ 폴더밑에 .php 확장자로 작성합니다. 참고 각각의 파일들에서 css 작성 필요시 파일명은 동일하게 만들고 확장자만 .css 로 생성합니다.
다국어 지원 모듈
다국어를 지원하는 모듈일 경우 다음과 같이 var.menu.php를 아래와 같이 구성합니다.
그리고 메뉴파일에 대한 언어파일은 모듈폴더/language/언어폴더/lang.admin-menu.php 로 만들고 다음과 같이 작성합니다. 아래의 예제는 한국어일 경우입니다.
5-7. 모듈콘텐츠 연결파일
관리자페이지 - 사이트 에서 메뉴와 페이지의 등록정보에 '직접꾸미기', '위젯으로 꾸미기', '모듈콘텐츠 연결' 3가지의 형식이 있습니다. '모듈콘텐츠 연결'에 해당하는 서비스를 제공하고자 할 경우 연결파일을 제공해야 합니다. 연결파일은 모듈폴더/admin/var/ 폴더안에 var.joint.php 로 생성하며 다음과 같은 형식으로 작성합니다.
5-8. 다국어 지원 (언어셋)
주의 다국어 지원시 언어폴더 는 반드시DEFAULT 를 포함해야 하며 한국어,영어,일본어,중국어 등 어떤 언어든 상관이 없습니다. 주 언어가 한국어일 경우 DEFAULT 를 한국어로, 주언어가 영어라면 DEFAULT 를 영어로 지정하면 됩니다. 참고로 Rb 설치 패키지에는 DEFAULT 언어로 한국어가 지정되어 있습니다.
다국어 지원 모듈 개발시 DEFAULT 언어셋을 포함해야 하는 이유
시스템 언어를 영어로 설정했다고 가정할 때, 사용할 모듈이 한국어와 일본어만 지원한다면 해당모듈은 영어 언어셋이 없기 때문에 출력을 할 수 없게 됩니다. 이런경우 DEFAULT 언어셋으로 출력되며 다음의 보기와 같습니다.
시스템 언어 | 사이트 언어 | 사용모듈 |
---|---|---|
영어 | 일본어 | 한국어 중국어 Default |
결과
- 관리자모드
- 영어 언어셋이 없으므로 Default 인 중국어로 출력
- 사용자모드
- 일본어 언어셋이 없으므로 Default 인 중국어로 출력
시스템 언어 | 사이트 언어 | 사용모듈 |
---|---|---|
영어 | 중국어 | 한국어 Default 중국어 |
결과
- 관리자모드
- 영어 언어셋이 없으므로 Default 인 한국어로 출력
- 사용자모드
- 중국어 언어셋이 있으므로 중국어로 출력
언어셋 파일구조
언어셋 파일 작성방법
언어셋 파일은 중복을 피하기 위해 반드시 다음과 같은 방식으로 작성해야 합니다.
언어셋 변수는 반드시 $lang
을 사용해야 합니다.
인자 네이밍은 반드시 중복되지 않도록 영문 소문자 + 숫자 조합으로 가급적 2자리 이내에서 정의합니다.
언어셋 호출방법
언어셋을 실제로 사용하기 위해서는 반드시 _LANG()
함수를 사용해야 하며 특수한 경우 변수 자체를 사용할 수도 있습니다.
특정 언어셋 인클루드 방법
위의 언어셋 파일구조외의 언어셋을 추가한 경우라면 필요한 곳에서 직접 해당 언어셋을 인클루드해 주어야 사용이 가능합니다. 이때 다음과 같이 인클루드하면 자동으로 해당 언어셋이 인클루드 되며, 없는 언어셋이 호출될 경우 DEFAULT 언어셋으로 자동 대체됩니다.
6.예제
모듈의 기본구조를 파악한 후에는 다음의 샘플들을 다운로드 받아 직접 확인합니다. 단계별로 모듈의 기능과 구조를 확장해 나가는 방법을 확인할 수 있으며 모든 과정의 구조를 파악한 후에는 Rb 설치시에 포함되어 있는 기본 모듈들을 파악함으로서 Rb 모듈의 구조와 개발 방법을 마스터 하게 됩니다.
다시한번 강조하지만 모듈의 구조는 정해진 것이 아닙니다. 기본 구조위에 필요에 따라 구조를 확장할 수 있으며 이는 전적으로 개발자의 역량과 개발할 모듈의 성격이나 목적에 따라 달라지게 됩니다.
7. 패키징 방법
모듈 설치파일은 반드시 rb_module_모듈폴더명.zip 이어야 합니다. 개발한 모듈폴더가 mymodule 일 경우 우선 mymodule.zip 으로 압축한후 rb_module_모듈폴더명.zip으로 파일명을 변경합니다.
주의 압축파일인 rb_module_모듈폴더명.zip 의 압축을 풀었을때 mymodule 폴더가 생성되면 안되며 mymodule 폴더내의 파일들이 최상위에 풀려야 합니다. 모듈폴더는 Rb에 설치되는 과정에서 자동으로 생성됩니다.
8. 활용 TIP
Rb 기본모듈을 통해 구조파악 하기
모듈을 직접 만들기 위해서는 어느정도 구조파악에 대한 시간이 필요합니다.
이를 가장 단축하기 좋은 방법은 Rb에 포함되어 있는 기본 모듈들을 파악해보고 수정해 보는 것입니다.
약간의 변경을 통해서 새로운 모듈을 만들다 보면 어느순간 모듈에 대한 감을 잡는데 크게 도움이 될 것입니다.
그 후에는 개발에 드는 시간이 대폭 줄게 될거라 확신합니다.