묻고답하기

 

 제목과 같은 방식으로 mid가 존재하지 않는 상태에서 module과 act만 가진 상태에서 본인이 선택한 레이아웃을 입히려면 어떻게 해야 하는지 조언을 구합니다.

 

 다른 말로 하면 특정 mid가 존재하는 상태에서도 강제로 다른 레이아웃으로 바꿔서 보여주는 방식이 궁금합니다.

 

 모듈 config을 저장하고 가져오는 방식은 rss 모듈을 참고했습니다.

 

approach.admin.view.php의 dispApproachAdminIndex():

본 모듈의 관리자 설정 화면을 보여주는 view 메서드 입니다.

/**
 * In case an administrator page has been initialized
 *
 * @return Object
 */
function dispApproachAdminIndex() {
// 필요한 Model Import
$oModuleModel = getModel('module');

$total_config = $oModuleModel->getModuleConfig('approach');

// total_config 설정
if(!$total_config) $total_config = new stdClass();

// Context를 set 한다.
Context::set('total_config', $total_config);

// Security 설정
$security = new Security();
$security->encodeHTML('total_config..');

// Template 설정
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('index');

$oLayoutModel = &getModel('layout');
Context::set('layout_list', $oLayoutModel->getLayoutList());
}

 

approach.admin.controller.php의 procApproachAdminInsertConfig():

관리자 화면에서 받아온 값을 module의 config에 저장 

/**
 * All module configurations
 *
 * @return void
 */
function procApproachAdminInsertConfig()
{
$oModuleModel = getModel('module');
$total_config = $oModuleModel->getModuleConfig('approach');

$config_vars = Context::getRequestVars();

// 실제적으로 Module의 Config이 저장되는 함수
$output = $this->setFeedConfig($config_vars);

// 결과출력 메세지 처리
$message = Context::getLang('success_updated');
$this->setMessage($alt_message, 'info');

// Redirect 처리
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispApproachAdminIndex');
$this->setRedirectUrl($returnUrl);
}

 

tpl/index.html:

본 모듈의 관리자 화면 템플릿 파일

<div class="x_page-header">
<h1>
{$lang->approach}
<span class="path" cond="$module_info->mid">
> <a href="{getSiteUrl($module_info->domain,'','mid',$module_info->mid)}" target="_blank"|cond="$module=='admin'">{$module_info->mid}</a><block cond="$module_info->is_default=='Y'">({$lang->is_default})</block>
</span>
<a href="#aboutModule" class="x_icon-question-sign" data-toggle cond="!$module_info->mid"></a>
</h1>
</div>
<p id="aboutModule" class="x_alert x_alert-info" cond="!$module_info->mid" hidden>{nl2br($lang->about_approach)}</p>

<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/approach/tpl/index/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>

<section class="section">
<h1>{$lang->is_default}</h1>
<form ruleset="insertConfig" action="./" method="post" enctype="multipart/form-data" class="x_form-horizontal">
<input type="hidden" name="module" value="approach" />
<input type="hidden" name="act" value="procApproachAdminInsertConfig" />
<input type="hidden" name="xe_validator_id" value="modules/approach/tpl/index/1" />

<div class="x_control-group">
<label class="x_control-label" for="layout_srl">{$lang->layout}</label>
<div class="x_controls">
<select name="layout_srl" id="layout_srl">
<option value="0">{$lang->notuse}</option>
<option loop="$layout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$total_config->layout_srl== $val->layout_srl">{$val->title} ({$val->layout})</option>
</select>
<a href="#layout_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
<p id="layout_help" class="x_help-block" hidden>{$lang->about_layout}</p>
</div>
</div>

<div class="btnArea x_clearfix">
<button type="submit" class="x_btn x_btn-primary x_pull-right">{$lang->cmd_save}</button>
</div>

</form>
</section>

 

approach.view.php의 init():

관리자 화면이 아닌 모듈의 일반 view의 초기화 메서드

// view 초기화
function init() {
$oDocumentModel = &getModel('document');

// 스킨을 설정하는 부분.
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
if(!is_dir($template_path)||!$this->module_info->skin) {
$this->module_info->skin = 'xe_approach_official';
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
}
$this->setTemplatePath($template_path);
$this->setTemplateFile(strtolower(str_replace('dispApproach','',$this->act)));

$oModuleModel = getModel('module');
$total_config = $oModuleModel->getModuleConfig('approach');

// 레이아웃의 정보를 가져옴
$layout_srl = $total_config->layout_srl;
if($layout_srl) {
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);

if(!$layout_info) return;

$this->setLayoutPath($layout_info->path);
$this->setLayoutFile('layout.html');
}
}

 

 $total_config에 해당하는 부분이 관리자 화면에서 저장한 layout_srl 값이 들어있구요.

 그걸 바탕으로 위와 같은 방식으로 시도해보았는데 아래와 같이 화면이 나옵니다. 해당 레이아웃이 커스텀 설정 값이 컴파일 된 값이 아닌 순수 레이아웃 파일 자체만 씌워주는 것 같은데요.

 

캡처.PNG

 

 저와 같은 시도를 해보신 분이 없으신지 궁금합니다. 각 mid에 대한 레이아웃 셋팅이 어디에서 핸들링 되고 있는지 몰라서요. mid가 존재하지 않는 상태에서 모듈 자체에 대해서 레이아웃을 씌우고 싶은데 조언을 구합니다.

 

 감사합니다.

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
GG1627a 이미지맵 특정부분만 링크가 안먹히네요 [1] 2016.02.14 by DoorWeb
구름의저편 애드온 질문입니다.  
해뜰참 위젯이 홈페이지에 적용이 안되네요. ㅠㅠ [1] 2016.02.14 by DoorWeb
줄리아22 이메일로 비밀번호 잦기 기능이요, 없애거나 다른 항목까지 추가할 수 있는지요 [1] 2016.02.14 by 불금
샤랄라 메인화면 설정 게시판화면말고 처음 셋팅화면으로 돌리는방법 [1] 2016.02.14 by 휘즈
횡단보도 xe 코어 쉬운설치를 했다가 오류가 났는데 복구는 불가능한건가요ㅠㅠ [1] 2016.02.14 by 휘즈
tohappy 외부페이지에 댓글 추가 가능할까요?  
c*** 이미지 슬라이더 그림 크기를 고정시키고 싶어요  
XESTUDIO 통합검색을 사용할 수 없습니다 [3] 2016.02.13 by 배삼열
바다사랑 고수님 도와주세요~~~ [1] 2016.02.13 by gnurails
말금 네이버 게시글 관련 [1] 2016.02.13 by gnurails
bncPlan xe가 문제인지, 제가 문제인지ㅠㅠ [2] file 2016.02.13 by gnurails
xpressengine01 로그인 문제 [3] 2016.02.13 by xpressengine01
XESTUDIO 썸네일이 존재하지 않을때 [2] 2016.02.13 by XESTUDIO
안드로이더스스 설정문제인가요?... [1] file 2016.02.13 by 불금
c*** xe 자료실 같은 스킨 있나요?  
star_key 어디가 잘못되었는지 해석좀 부탁드립니다.  
안녕하세요5000 xe 카운터 예전 제로.보드4 카운터처럼 방문할시 카운팅되도록 못하나요 [7] 2016.02.13 by 안녕하세요5000
dbaseman 도메인 포트 변경시 게시판이 열리지 않습니다.  
gnurails 회원 그룹 없이 로그인 후 권한 조정