https://web.archive.org/web/20161111093035/http://www.xeschool.com/xe/xenote_module_admin_model

Module Admin Model

관리자를 위한 백 엔드 뷰(View)가 실행되면 관리자-인덱스로 설정했던 dispExampleAdminList 액션이 작동하고 그 진행과정을 설명한 그림이다. 또한 앞으로 만들게 될 관리자 목록 보기를 위한 설계도이다. 이 과정에서는 어드민 모델(example.admin.model.php)을 이용할 계획이다. 실제로 게시판(Board) 모듈에서는 2번이 생략되고 곧장 쿼리(query)를 실행하여 xe_modules 테이블에서 필요한 값을 찾아 온다. 하지만 학습에 필요한 예제이기 때문에 모델(Model)을 활용하는 방법으로 진행하고자 한다.

https://web.archive.org/web/20161111093035im_/http:/www.xeschool.com/xenote_page/images/module_mvc_dispExampleAdminList.png

XE코어의 모듈 중에는 **모듈(module)**이라는 이름의 모듈이 있다.(혼동하기 않기 위해 앞으로 module 이라고 표기한다.) 이 module이 하는 일은 다른 모듈들이 만든 모듈의 식별 번호(module_srl) 또는 모듈의 아이디(mid)를 등록하고 관리하는 일을 한다. 즉 module을 확장(extends)하여 사용한다는 것은 추가된 모듈(example 모듈)이 앞으로 만들게 될 모듈의 아이디(mid)를 module이 관리하는 테이블(xe_modules)에 등록하고 사용할 수 있도록 module의 도움을 받겠다는 뜻이다.

https://web.archive.org/web/20161111093035im_/http:/www.xeschool.com/xenote_page/images/xe_modules.png

예를 들어, 게시판 모듈을 1개 생성하면 새로운 모듈 고유 번호(module_srl)와 모듈의 아이디(mid)가 만들어지고 이 게시판에서 작성된 글은 새로운 문서 고유 번호(document_srl)가 붙게 된다. 그런데 이 문서는 어디를 가든지 부모의 이름을 가지고 다닌다. 즉 어느 부모의 자식인지 알 수 있도록 모듈 번호(module_srl)를 함께 저장해 두었다는 뜻이다. (옛날 주민등록증에는 자신의 이름 밑에 부모의 이름이 함께 기록되어 있었다...^^)

관리자 목록은 module을 확장하여 앞으로 example 모듈이 생성하게 될 모듈의 아이디와 모듈 번호, 즉 모듈의 정보를 module 테이블에 등록하고 조회/수정/삭제하는 기능을 하게 된다.

1. 관리자 목록

최종적인 결과물을 목록으로 출력하는 관리자 페이지를 먼저 만들어 보자. 6번에서 처럼 $example_list 변수가 값을 받아 올 것이다. $example_list 변수는 배열의 형태이고 foreach 문을 이용해 루프 형식으로 각각 값에 접근하여 출력한다. tpl/index.html에 다음의 내용을 추가하고 업로드한다.

tpl/index.html

제목 없는 데이터베이스

제목 없는 데이터베이스

모듈은 언어팩(lang)을 사용한다. 지금은 관리자 페이지를 만들고 있기 때문에 대부분의 단어들은 xe/common/lang/ko.lang.php 파일의 지원을 받을 수 있다. 만약 공통 언어로 등록되어 있는 단어가 아닌 새로운 단어를 추가하고 사용하려면 example 모듈에 lang/ 폴더를 새로 만들고 ko.lang.php 파일에 미리 추가해 두어야 한다.(example/lang/ko.lang.php) foreach 문을 이용해 키와 값으로 분리된 변수의 값을 해당 셀(cell)에 출력한다는 내용이다. 모듈의 설정과 삭제에 대한 액션은 다음 과정에서 진행하기 때문에 우선 넣어 두도록 한다.

2. example.admin.view.php

이전에 작성했던 어드민 뷰 파일에서 템플릿 설정 부분과 함께 추가된 내용을 포함하여 업로드 한다.

제목 없는 데이터베이스

module이 가지고 있는 모델(model)의 객체를 생성한다는 것은 module이 사용하는 방법(메소드)을 나도(example) 여기에서(exampleAdminView) 도움을 받고 싶다는 뜻이다. 당연히 module이 사용하는 모델의 메소드는 자신이 관리하고 있는 xe_modules 테이블을 조회하고 모듈의 다양한 정보들을 확인하고 체크하는 일일 것이다. 그러한 준비가 되었다면 구해온 모듈의 정보($module_info)를 템플릿 파일에 보내기 위해 URL 뒤에 붙인다. 이것이 Context::set() 이다. 다시말해서 초기화(init) 부분에서는 일단 요청이 들어온 URL 뒤에 $module_srl 이 있는지 확인해 보고, 있다면 module 모델을 확장하여 어떤 모듈인지 정보를 달라고 module 모델의 메소드를 실행해 보고, 반환된 모듈의 정보 값을 템플릿에 보내기 위해 예쁘게 세팅해 둔다...^^

관리자 메뉴에서 모듈(example)을 클릭하면 dispExampleAdminList() 함수를 찾아서 실행한다. dispExampleAdminList 액션은 이미 module.xml 파일에서 어드민-인덱스로 작성해 두었기 때문이다. 목록을 만들 준비를 하기 위해 페이지에 대한 사전 작업을 해 둔다. 이번에는 내가(example) 사용하는 모델(Model)을 확장한다. 왜냐하면 xe_modules 테이블에서 module 컬럼을 확인하고 example 이라고 등록된 모듈이 있는지 조회하고 그 결과를 반환 받기 위해서다.