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 •
Prev 본문에 삽입된 이미지들이 사라진 경우 본문에 삽입된 이미지들이 사라진 경우 2017.09.25by 팔공산 대댓글에 'OOO님에게 달린 댓글' 구현하기 Next 대댓글에 'OOO님에게 달린 댓글' 구현하기 2017.05.16by 팔공산
    댓글이 하나도 없네요ㅠㅠ
    Tip이 도움이 되었다면 댓글과 평가 부탁합니다. Tip에 대한 궁금한 점은 댓글로 남겨 주시면 성심껏 답변 드립니다.
이 글 평점 주기
5점
?

Articles

2 3 4 5 6 7 8 9 10 11