외부링크 파일을 로그인회원만 확장변수활용 다운받게 하는 방법
작성글들중 프로그램용량이 큰 자료의 경우 외부에서 파일을 가져와서 링크를 걸어 두었는데
이런 경우는 게시판의 파일권한과 상관 없이 다운로드가 가능했습니다.
그런 이유로 로그인한 회원만 자료를 다운받게 할려고
글 작성란에 XE의 문법을 사용해 보니 보안상의 이유로 안 된답니다.
https://xetown.com/qna/895519
그래서 게시판 확장변수를 이용해서 로그인회원과 비로그인회원을 구별해서 외부자료를 다운받게 만들었습니다.
먼저 sketchbook5 게시판을 이용해서 만들었습니다.
스케치북게시판에는 "본문 일반 설정"에 "확장변수 위치"란 설정이 있습니다.
기본 게시판 skin.xml 파일안에는 아래와 같이 2개의 선택만이 있습니다.
<var name="et_var" type="radio">
<title xml:lang="ko">확장변수 위치</title>
<options value="">
<title xml:lang="ko">본문 안에(기본)</title>
</options>
<options value="2">
<title xml:lang="ko">제목 아래</title>
</options>
</var>
그런데 _read.html 파일안에는 총3군데의 확장변수 위치가 있습니다.
위에 처럼 "본문안에(기본)" 와 "제목아래" 그리고 본문 하단에 한군데가 더 있습니다.
그래서 저는 아래와 같이 수정했습니다.
<var name="et_var" type="radio">
<title xml:lang="ko">확장변수 위치</title>
<options value="">
<title xml:lang="ko">본문 안에(기본)</title>
</options>
<options value="1">
<title xml:lang="ko">제목 아래</title>
</options>
<options value="2">
<title xml:lang="ko">본문 하단</title>
</options>
</var>
그리고 _read.html 파일안에 코드를 보면 어떤 경우이던 "본문 안에"는 항상 출력됩니다.
그래서 저는 3군데중 지정한 곳만 나오게 수정했습니다.
<!--// Extra Var : Header -->
<table cond="$mi->et_var=='1'
- 생략 -
<!--// Body -->
<div class="rd_body clear">
<!--// Extra Var -->
<block cond="!$mi->extravar_print">
<table cond="$mi->et_var==''
- 생략 -
<!--// Extra Var : content_footer -->
<block cond="!$mi->extravar_print">
<table cond="$mi->et_var=='2'
그런 다음 skin.xml 파일안에 로그인한 회원이 다운받을 URL 이 적혀 있는 확장변수의 입력항목이름 부분을 추가하는 설정을 했습니다.
<var name="et_logon_name" type="text">
<title xml:lang="ko"> ┖ 본문 하단 로그인후 파일 다운 확장변수 입력항목이름</title>
<description xml:lang="ko">로그인후 파일 다운 확장변수 입력항목이름을 적어주세요.</description>
</var>
그리고 _read.html 파일안에 "본문 하단" 확장변수부분을 아래와 수정합니다.
<!--// Extra Var : content_footer -->
<block cond="!$mi->extravar_print">
<table cond="$mi->et_var=='2' && $oDocument->isExtraVarsExists() && (!$oDocument->isSecret() || $oDocument->isGranted())" class="et_vars bd_tb">
<caption class="blind">Extra Form</caption>
<tr loop="$oDocument->getExtraVars() => $key,$val" cond="$val->getValueHTML() && $val->eid!='rd_preview'">
<!--@if($val->name==$mi->et_logon_name)-->
<!--@if($logged_info)-->
<a href="#toggleExtraVars" class="btn">다운로드</a>
<div id="toggleExtraVars">
{$val->getValueHTML()}
</div>
<script type="text/javascript">
jQuery.noConflict();
jQuery(function($){
$('#toggleExtraVars').hide();
$('a[href=#toggleExtraVars]').click(function(){
$($(this).attr('href')).toggle();
return false;
});
});
</script>
<!--@else-->
<p><a href="#" onclick='javascript:alert("회원가입 로그인후 다운로드가 가능합니다.");'>"회원가입 로그인후 다운로드가 가능합니다"</a></p>
<!--@end-->
<!--@else-->
<th scope="row">{$val->name}</th>
<td cond="$val->eid!='rating'&&$val->eid!==$mi->etc_name">{$val->getValueHTML()}</td>
<td cond="$val->eid!='rating'&&($mid==$mi->etc_mid&&$val->eid==$mi->etc_name)">{$mi->f_name} {number_format(str_replace(',','',$val->getValueHTML()))}{$mi->b_name}</td>
<td cond="$val->eid=='rating'&&$val->eid!==$mi->etc_name" class="rating"><span class="starRating" title="{$val->getValueHTML()}{$lang->score}"><span style="width:{$val->getValueHTML()*10}%">{$val->getValueHTML()}</span></span></td>
<!--@end-->
</tr>
</table>
</block>
그럼 게시판 파일수정은 다 되었습니다.
게시판 설정의 "사용자 정의"에서 외부파일 다운로드 URL을 작성할 수 있는 확장변수를 하나 만들고 임의의 "입력항목 이름"을 정합니다.(예:다운로드)
확장변수를 만든 후 "스킨 관리"에 들어가서 "확장변수 위치"를 본문 하단으로 선택하고
"본문 하단 로그인후 파일 다운 확장변수 입력항목 이름"에 다운로드를 적어줍니다.
그럼 모든 설정은 끝이 났습니다.
게시글 작성에서 확장변수란에 외부파일 다운로드 경로를 적어주시면
로그인한 회원은 "다운로드"버턴을 클릭하면 토글로 하단에 다운로드 경로가 보이며,
비로그인한 분은 "회원가입 로그인후 다운로드가 가능합니다"란 문구를 볼 수 있습니다.
적용페이지에 가 보시면 어떻게 작동되는지 아실 수 있습니다.
저는 버턴대신 이미지로, pr_tooltip 애드온을 이용했습니다.
http://moonhouse.co.kr/xe/346150
[로그인]
[비로그인}
댓글 5
이제 해야죠~
저도 저거으로 적용할려고 합니다
감사 합니다
제가 감사합니다.
잘 응용해서 사용하세요.