관리자 견적서폼 등록 화면 구현입니다. 구현할 화면은 아래와 같습니다. formView Class에 info/module.xml 에 작성한 dispFormAdminInsert()과 템플릿을 작성하고 입력항목의 유효성 체크 등을 위한 fliter와 callback 함수를 작성합니다. 그리고 실제 등록하는 부분으로 procFormAdminInsert()를 작성합니다.
견적서폼을 등록하는 관리자 화면입니다. 게시판으로 보면 게시판을 생성하는 부분입니다. 견적서 폼을 추가하면 module 컨트롤러에서 모듈을 추가 합니다. 실제 DB의 xe_modules table 등에 등록을 하여 mid및 module_srl을 생성합니다.
/**
* @brief 견적서(mid) 추가/수정 폼
**/
function dispFormAdminInsert(){
// 스킨 목록을 구해옴
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list',$skin_list);
// 레이아웃 목록을 구해옴
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
// 템플릿 파일 지정
$this->setTemplateFile('form_insert');
}
mid를 생성시 레이아웃 및 스킨을 설정 합니다. 견적서 모듈에서도 스킨 및 레이아웃 지정을 위해
form/skins/의 스킨 목록과 XE_ROOT/layouts/ 레이아웃 목록을 가져와 템플릿에 전달합니다.
$oModuleModel = &getModel('module');
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list',$skin_list);
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
견적서폼 등록을 위한 fliter입니다. action을 form 모듈의 procFormAdminInsert 를 지정하였고 등록전 javascript confirm()으로 "confirm_submit" 의 언어코드를 사용하였습니다.
mid는 필수 최대 40자 영문자시작 숫자조합의 조건을 설정하였습니다.
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText w200" />
module.xml에서 정의한 controller 부분 중 'procFormAdmin~'으로 시작하는 관리자 controller action과 생성자 init를 form class를 상속받는 formAdminController class에 member method로 작성합니다.
class formAdminController extends form {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 견적서 폼(mid) 등록
**/
function procFormAdminInsert(){
}
}
module controller의 insertModule()/updateModule()로 모듈을 등록/수정합니다. 또 formAdminController 자신의 객체 $this의 add()로 반환할 변수인 page, module_srl을 등록하여 filter에 선언한 callback 함수에 배열 형식의 argument로 받습니다.
function procFormAdminInsert(){
// request 값을 모두 받음
$args = Context::getRequestVars();
$args->module = 'form';
// module controller를 받음
$oModuleController = &getController('module');
// module_srl의 값에 따라 insert/update
if(!$args->module_srl) {
$output = $oModuleController->insertModule($args);
$msg_code = 'success_registed';
} else {
$output = $oModuleController->updateModule($args);
$msg_code = 'success_updated';
}
// 오류가 있으면 리턴
if(!$output->toBool()) return $output;
// $output은 Object객체로 리턴
// $oModuleController->insertModule() 또는 $oModuleController->updateModule() 에서 리턴시 설정한 module_srl를 가져옴
$module_srl = $output->get('module_srl');
// 에디터의 높이 조정 및 자동 저장을 하지 않음
$oEditorModel = &getModel('editor');
$oModuleController = &getController('module');
$editor_config = $oEditorModel->getEditorConfig($module_srl);
$editor_config->editor_height = 300;
$editor_config->enable_autosave = 'N';
$oModuleController->insertModulePartConfig('editor',$module_srl,$editor_config);
// $this객체에 add()로 변수를 등록하여 호출하여 XMLRPC로 리턴시 값을 추가함
$this->add('page',Context::get('page'));
$this->add('module_srl',$output->get('module_srl'));
$this->setMessage($msg_code);
}
모듈 등록이 안됩니다. ㅠㅠ (첨부올립니다.)