구현할 견적서 모듈의 관리자 견적서폼 목록입니다.
module.xml에서 정의한 view 부분 중 'dispFormAdmin~'으로 시작하는 관리자 뷰 action과 생성자 init를 form class를 상속받는 formAdminView class에 member method로 작성합니다.
class formAdminView extends form {
/**
* @brief 초기화
**/
function init() {}
/**
* @brief 견적서(mid) 목록
**/
function dispFormAdminList(){}
/**
* @brief 견적서(mid) 추가 폼
**/
function dispFormAdminInsert(){}
/**
* @brief 확장 변수 설정
**/
function dispFormAdminExtraVars() {}
}
init()는 XE_ROOT/classes/module/ModuleObject.class.php에서 보면 action이 들어오게 될때 act 값으로 action의 타입(model, view, controller)를 찾아 해당 class를 생성후 init()를 실행해 줍니다. 따라서 init()에서는 필요한 값을 미리 설정해 주면 차후 구현하기 편합니다.
/**
* @brief 초기화
**/
function init() {
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
$module_srl = Context::get('module_srl');
if(!$module_srl && $this->module_srl) {
$module_srl = $this->module_srl;
Context::set('+
'+
'module_srl', $module_srl);
}
// module model 객체 생성
$oModuleModel = &getModel('module');
// module_srl이 넘어오면 해당 모듈의 정보(브라우져 타이틀, 관리자, 레이아웃 등 xe_modules table의 값과 정보)를 미리 구해 놓음
if($module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
$this->module_info = $module_info;
Context::set('module_info',$module_info);
}
// tpl인 관리자 템플릿으로 경로 설정
// 템플릿 경로를 미리 셋팅 하면 action member method에서 따로 지정할 필요가 없음.
$template_path = sprintf("%stpl/",$this->module_path);
$this->setTemplatePath($template_path);
}
form 모델 객체에서 견적서 폼 목록을 받아 tpl/list.html 템플릿에 전달합니다.
/**
* @brief 견적서(mid) 목록
**/
function dispFormAdminList(){
$page = Context::get('page');
if(!$page) $page = 1;
$args->page = $page;
// form model에서 목록을 가져옴
$oFormModel = &getModel('+
'form');
$output = $oFormModel->getFormList($args);
// 템플릿에 전해주기 위해 set함
Context::set('form_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
// tpl/list.html 로 지정
$this->setTemplateFile('list');
}
form.model.php의 formModel class에 getFormList() member method를 작성합니다.
class formModel extends module {
function getFormList($args){
$output = executeQueryArray('form.getFormList', $args);
return $output;
}
}
executeQueryArray('form.getFormList', $args); 에서
Query ID "form.getFormList" Query는 form/queries/getFormList.xml 입니다.
<query id="getFormList" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module" default="form" />
</conditions>
<navigation>
<index var="sort_index" default="module_srl" order="desc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
select * from xe_modules where module='form' 의 쿼리에 페이징을 위한 정보가 선언되어 있습니다.
formModel::getFormList($args) 에서 $args->page 값이 <page var="page" default="1" /> 를 통해 page 값이 셋팅됩니다. 마찬가지로 $args->list_count 값이 설정된다면 목록의 한 페이지에 설정된 값만큼 견적서폼이 나열됩니다.
formModel::getFormList()에서 값을 받아 템플릿에 전달 위해 설정하고 tpl/list.html 로 지정 하였습니다.
Context::set('form_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('list');
실제 템플릿(form/tpl/list.html) 에서는 아래와 같이 구현하였습니다.
13 <tbody>
14 <!--@foreach($form_list as $no => $val)-->
15 <tr class="row{$cycle_idx}">
16 <td>{$no}</td>
17 <td class="wide"><a href="{getUrl('','mid',$val->mid)}" title="{htmlspecialchars($lang->cmd_view)}">{$val->browser_title}</a></td>
18 <td class="nowrap">{zdate($val->regdate,"Y-m-d")}</td>
19 <td class="nowrap">
20 <a href="{getUrl('act','dispFormAdminInsert','module_srl',$val->module_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a>
21 </td>
22 </tr>
23 <!--@end-->
24 </tbody>
Context::set('+ 'module_srl', $module_srl);
오타 인가요?