오늘은 커뮤니티 한 곳에 새롭게 랜덤으로 게시글을 열람할 수 있는 랜덤게시글 모듈을 설치하고 적용했습니다. 그런데 선택된 게시글로 이동할때 스킨의 스크립트를 이용해서 이동을 하게 되다 보니 스킨을 로딩해야하고 하는 등의 과정 그리고 이로인해 모바일 등의 환경에서 원치하는 모습이 잠깐 연출되기도 합니다.
차라리 스킨을 가져와서 해당 스킨에서 선택된 게시글로 이동하기 보다는 직접 선택된 게시글을 곧바로 php에서 이동해 버리면 빠르고 깔끔한 동작으로 이동이 되어서 오늘 코드를 추가해서 적용하였습니다.
/modules/randocument/randocument.view.php
위 파일을 열어보면
function dispRandocumentRand()
{
if(!$this->module_info->seleted_module_srl)
{
return new BaseObject(-1, '설정을 불러 올 수 없습니다.');
}
$oRandocumentModel = getModel('randocument');
$output = $oRandocumentModel->getRandocumentToDocumentSrl($this->module_info->seleted_module_srl);
if(!$output->toBool())
{
return $output;
}
if($output->data->document_srl)
{
$oDocument = getModel('document')->getDocument($output->data->document_srl);
$link = $oDocument->getPermanentUrl();
Context::set('getlink', $link);
}
else
{
Context::set('getlink', null);
}
if($this->module_info->test_mode === 'yes')
{
Context::set('document', $oDocument);
}
else
{
Context::set('document', null);
}
$this->setTemplateFile('rand');
}
}
위와 같은 함수에서 랜덤으로 게시글 1개를 선택한 후 해당 게시글 정보를 모듈의 스킨을 불러와서 스킨에서 해당 게시글 정보를 기반으로 이동하게 되어있습니다.
$this->setTemplateFile('rand');
스킨을 로딩하게 되는 코드 바로 위쪽에 바로 선택된 게시글로 php header location 으로 이동해 버리는 코드를 추가했습니다.
if($link != null && $this->module_info->test_mode != 'yes') { if(Mobile::isMobileCheckByAgent() && $this->module_info->option_url_mobile) { header('Location: ' .$link .$this->module_info->option_url_mobile); } else if($this->module_info->option_url_pc) { header('Location: ' .$link .$this->module_info->option_url_pc); } else { header('Location: ' .$link ); } }
위 코드가 추가되었습니다.
변경된 함수 전체는 아래와 같습니다.
function dispRandocumentRand() { if(!$this->module_info->seleted_module_srl) { return new BaseObject(-1, '설정을 불러 올 수 없습니다.'); } $oRandocumentModel = getModel('randocument'); $output = $oRandocumentModel->getRandocumentToDocumentSrl($this->module_info->seleted_module_srl); if(!$output->toBool()) { return $output; } if($output->data->document_srl) { $oDocument = getModel('document')->getDocument($output->data->document_srl); $link = $oDocument->getPermanentUrl(); Context::set('getlink', $link); } else { Context::set('getlink', null); } if($this->module_info->test_mode === 'yes') { Context::set('document', $oDocument); } else { Context::set('document', null); } if($link != null && $this->module_info->test_mode != 'yes') { if(Mobile::isMobileCheckByAgent() && $this->module_info->option_url_mobile) { header('Location: ' .$link .$this->module_info->option_url_mobile); } else if(!Mobile::isMobileCheckByAgent() && $this->module_info->option_url_pc) { header('Location: ' .$link .$this->module_info->option_url_pc); } else { header('Location: ' .$link ); } } $this->setTemplateFile('rand'); }
이렇게 코드를 추가하면 모듈의 스킨을 화면에 출력해서 해당 스킨에서 게시글로 이동하는 스크립트를 실행하고 하는 과정으로 진입하지 않고 뽑힌 랜덤 게시글로 곧바로 이동하여 불필요한 시간,과정 그리고 그 과정속에서 부자연 스러운 장면이 노출되는 그런 부분들을 방지 할 수 있게 되었습니다.