XE타운

확장변수중 "단일 선택(radio)"시 "직접입력" 부분 나오게 수정

by 팔공산 posted May 19, 2017
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

이전 다음 위로 아래로 인쇄 목록
첨부파일 등록일 파일크기 다운 수
Extra Form
원작자 윤삼
출처 https://www.xetown.com/lakepark/529171

[수정 Tip]
저는 확장변수의 "mid"와 "사용자 정의 이름"을 설정에서 수정할 수 있게 하고,
아울러 단위와 최저치 메세지도 설정에서 수정할 수 있게끔 수정하는 방법입니다.

1. skin.xml에 추가
<group>
<title xml:lang="ko">확장변수 설정</title>
<var name="etc_mid" type="text">
<title xml:lang="ko">★수정확장변수 mid</title>
<description xml:lang="ko">수정할 확장변수의 mid(게시판명)를 적어주세요.
</description>
</var>
<var name="etc_name" type="text">
<title xml:lang="ko"> ┖ 수정할 확장변수 사용자 정의 이름</title>
<description xml:lang="ko">수정을 원하는 확장변수의 사용자 정의 이름을 적어주세요.</description>
</var>
<var name="f_name" type="text">
<title xml:lang="ko"> ┖ 확장변수 전방 단위</title>
<description xml:lang="ko">확장변수값 앞에 붙는 단위를 적어주세요.(예 ; 월)</description>
</var>
<var name="b_name" type="text">
<title xml:lang="ko"> ┖ 확장변수 후방 단위</title>
<description xml:lang="ko">확장변수값 뒤에 붙는 단위를 적어주세요.(예 ; 원)</description>
</var>
<var name="msg_1" type="text">
<title xml:lang="ko"> ┖ 최저치 이하 메세지 1</title>
<description xml:lang="ko">입력값이 최저치 이하인 경우 메세지 1</description>
</var>
<var name="msg_2" type="text">
<title xml:lang="ko"> ┖ 최저치 이하 메세지 2</title>
<description xml:lang="ko">입력값이 최저치 이하인 경우 메세지 2</description>
</var>
</group>


2. write_form.html 과 _write_form_mobile.html 수정(모바일까지 수정)

<td cond="$val->eid!==$mi->etc_name">{$val->getFormHTML()}</td>
<td cond="$mid ==$mi->etc_mid&&$val->eid==$mi->etc_name">
	<style>
		.exForm li{display:inline-block;line-height:26px;cursor:pointer}
		#donation_etc{display:none;margin-top:10px;vertical-align:middle;}
		#donation_etc input{width:83px;height:26px;font-size:12px;}
	</style>
	<ul>
	{@
		$val_array = explode(', ',$val->default);
		$val_value = implode('',$oDocument->getExtraEidValue($val->eid));
	}
		<li loop="$n=0;$n<count($val_array);$n++">
		<!--@if($n+1!=count($val_array))-->
			<input name="extra_vars{$val->idx}" class="radio" id="extra_vars{$val->idx}-100{$n+1}" type="radio" value="{$val_array[$n]}">
			<label for="extra_vars{$val->idx}-100{$n+1}">{$mi->f_name} {number_format($val_array[$n])}{$mi->b_name}</label>
		<!--@else-->
			<input name="extra_vars{$val->idx}" class="radio" id="extra_vars{$val->idx}-100{$n+1}" type="radio" value="">
			<label for="extra_vars{$val->idx}-100{$n+1}">직접 입력</label>
			<span id="donation_etc">
				{$mi->f_name} <input type="tel" id="etc_val" class="itx" value="<!--@if(!in_array($val_value,$val_array))-->{number_format($val_value)}<!--@end-->" />{$mi->b_name}
			</span>
		<!--@end-->
		</li>
	</ul>
	<p>{$val->desc}</p>
</td>

중간 소스 그대로 두고 코드 제일 아래에 스크립트 추가하세요.

<script>


jQuery(document).ready(function(){
	var etc = jQuery('#donation_etc'),
		li_last = etc.parent('li'),
		para = li_last.parent('ul').next('p'),
		pText = li_last.parent('ul').next('p').text(),
		li_rest = li_last.parent('ul').children('li').not(li_last),
		first_val = Number(li_last.parent('ul').children('li:first').children('input.radio').val()),
		etc_btn = li_last.children('input'),
		etc_val = jQuery('#etc_val'),
		donated = '{$val_value}',
		msg1 = '{$mi->msg_1}',
		msg2 = ' {$mi->msg_2}';


	if(donated==0) etc_val.val('');
	if(donated!=''&&donated!=0){
		etc_btn.val(donated.replace(/[^0-9]/g,''));
		etc_btn.prop('checked',true);
		etc.show();
		li_rest.children('input').each(function(){
			if(jQuery(this).val()==donated){
				jQuery(this).prop('checked',true);
				etc_val.val('');
				etc.hide();
			}
		});
	}


	etc_val.on({
		input: function(){
			etc_val.val(etc_val.val().replace(/[^0-9,]/g,'').replace(/(^0+)/,''));
			etc_btn.val(etc_val.val().replace(/[^0-9]/g,''));
			if(etc_btn.val()!=0&&etc_btn.val()<first_val) {
				etc_btn.val('');
				para.text(msg1);
			} else {
				etc_btn.val(etc_val.val().replace(/[^0-9]/g,''));
				para.text(pText);
			}
		},
		blur: function(){
			if(li_rest.data('mouseDown')!=true){
				etc_btn.val(etc_val.val().replace(/[^0-9]/g,''));
				etc_val.val(etc_val.val().replace(/[^0-9]/g,'').replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'));
				if(etc_btn.val()!=0&&etc_btn.val()<first_val) {
					etc_val.select();
					etc_btn.val('');
					para.text(msg1+msg2).hide().fadeIn(1000);
					etc_val.focus();
				}
			}
		}
	});


	li_last.on('click',function(){
		etc_btn.prop('checked',true);
		etc.show();
		etc_val.focus();
		etc_val.val(etc_val.val().replace(/[^0-9]/g,'').replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'));
		if(etc_val.val().replace(/[^0-9]/g,'')!=0&&etc_val.val().replace(/[^0-9]/g,'')<first_val) {
			etc_val.select();
			etc_btn.val('');
			para.text(msg1+msg2).hide().fadeIn(1000);
		}
		return false;
	});
	etc_btn.on('focus',function(){
		etc_btn.prop('checked',true);
		etc_val.focus();
	});


	li_rest.on('mousedown',function(e){
		li_rest.data('mouseDown',true);
	});
	li_rest.on('mouseup',function(e){
		li_rest.data('mouseDown',false);
	});
	li_rest.on('click',function(){
		jQuery(this).children('input').prop('checked',true);
		etc.hide();
		para.text(pText);
	});
});
</script>

이렇게 하지 않고 원본팁대로 붙여서 추가를 하면

로그인을 해도 글 작성란 아래 로그아웃때 처럼 이름,비번,메일등 의 란이 나옵니다.


3. _read.html 수정


<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>


이렇게 수정해서 사용하시면 다른 게시판에 큰 영향 주지않고

다양한 용도로 사용도 가능합니다.

이 Tip의 평점 (참여 : 0 / 총 점수 : ) 평균 평점 : 0.0점
TAG •
    댓글이 하나도 없네요ㅠㅠ
    Tip이 도움이 되었다면 댓글과 평가 부탁합니다. Tip에 대한 궁금한 점은 댓글로 남겨 주시면 성심껏 답변 드립니다.
이 글 평점 주기
5점
?

Articles

6 7 8 9 10 11 12 13 14 15