청춘불안정님 펜션 객실예약스킨에서 비수기 주중요금으로 리셋되는 문제

청춘불안정님 펜션 객실예약스킨에서 비수기 주중요금으로 리셋되는 문제

QA

청춘불안정님 펜션 객실예약스킨에서 비수기 주중요금으로 리셋되는 문제

본문

청춘불안정님 펜션 객실예약스킨을 베이스로해서 펜션예약 모듈을 만들었습니다

시즌에 준성수기,극성수기 정도만 추가되었고 모든 기능들은 그대로입니다.

객실예약 달력에서 성수기 날짜(객실) 선택 후

숙박기간이나 인원을 선택하면 비수기 주중요금(기본)으로 리셋이 되어 계산되고 있습니다.

 

비수기 주중 주말 등은 이상없이 계산이 됩니다.

 

아무리 찾아봐도 해결방법을 모르겠습니다 ;;

해결해보신 경험이 있으신 분들께 도움을 부탁드립니다 

 

스킨 링크 : http://sir.kr/g4_skin/61832# 

이 질문에 댓글 쓰기 :

답변 6

yyyy-mm-dd 형식으로 입력하지 않고 2016-1-10, 2016-12-1 등과 같이 설정하거나

탭,스페이스,엔터 등과 같이 쉽게 알아볼 수 없는 공백 등을 포함할 경우 간혹 발생했던 문제입니다.

아무튼 그것이 원인이라면 비교문에 strtotime 함수를 사용해보세요...
 

*변경전


if($open1 <= $select && $select <= $close1)


* 변경후


if(strtotime($open1) <= strtotime($select) && strtotime($select) <= strtotime($close1))


 

헐... 제 스킨을 아직도 사용하는 분이 있네요;;;

오랜만에 돌아왔는데 옛 필명을 봐서 기분이 좋습니다^^

 

각설하고...

1. 배포버전에서는 문제가 없죠? 간혹 일자설정을 잘못하시는 분들이 있었던 것으로 기억됩니다;;;

2. 성수기 주말을 선택하면 비수기주중 or 비수기주말 어떤 요금으로 계산되나요?

3. 주중/주말은 정상적용되고 일자도 올바르게 설정했다면,

skin.function.php 파일에서 getSeason 함수를 어떻게 수정했는지 올려봐주세요~

와~ 원제작자께서 답글을 달아주셨네요
해결을 못해서 죽을맛이었는데.. 정말 반갑고 감사합니다
 
소스 올려드리겠습니다.
 


$OBJECT = sql_fetch(" SELECT * FROM {$g4['goods_table']} WHERE g_code = '$GCODE' ");
=> 시즌정보를 담고 있는 OBJECT에 대한 정의입니다.
 
$OBJECT[g_stay_season_1] = "2016-10-01~2016-10-03,2016-10-31~2016-11-10" ; 
$OBJECT[g_stay_season_2] = "2016-10-04~2016-10-09" ;
$OBJECT[g_stay_season_3] = "2016-10-10~2016-10-15" ;
 
수정한 getSeason함수입니다. 
 
// 선택한 일자가 성수기인지를 추출한다 (성수기 : 1000, 비성수기 : 2000)
function getSeason($select)
{
	$result = 4000;
	
  global $OBJECT ;
  	//echo $OBJECT[g_stay_season_1] ."<br>";
	$arr1 = explode(',', $OBJECT[g_stay_season_1]);
	$max1 = count($arr1);
	for($i = 0; $i < $max1; $i++)
	{
		list($open1, $close1) = explode('~', $arr1[$i]);
		if($open1 <= $select && $select <= $close1)
		{
			$result = 1000;
			break;
		}
	}
	
	//echo $OBJECT[g_stay_season_2] ."<br>";
	$arr2 = explode(',', $OBJECT[g_stay_season_2]);
	$max2 = count($arr2);
	for($j = 0; $j < $max2; $j++)
	{
		list($open2, $close2) = explode('~', $arr2[$j]);
		if($open2 <= $select && $select <= $close2)
		{
			$result = 2000;
			break;
		}
	}
	
	//echo $OBJECT[g_stay_season_3] ."<br>";
	$arr3 = explode(',', $OBJECT[g_stay_season_3]);
	$max3 = count($arr3);
	for($k = 0; $k < $max3; $k++)
	{
		list($open3, $close3) = explode('~', $arr3[$k]);
		if($open3 <= $select && $select <= $close3)
		{
			$result = 3000;
			break;
		}
	}
	
	return $result;
}

 
 
수정한 getPrice 함수입니다.
 
// 선택한 일자의 이용요금을 추출한다 (이용요금을 추출할 수 있는 테이블의 필드명을 리턴한다)
function getPrice($select)
{
	$arr = array(
		'1000' => array('1000' => 'roomPrice_busy1', '2000' => 'roomPrice_busy1'),
		'2000' => array('1000' => 'roomPrice_busy2', '2000' => 'roomPrice_busy2'),
		'3000' => array('1000' => 'roomPrice_busy3', '2000' => 'roomPrice_busy3'),
		'4000' => array('1000' => 'roomPrice_week', '2000' => 'roomPrice_default')
	);
	$season = getSeason($select);
	$week = getWeek($select);
	$result = $arr[$season][$week];
	return $result;
}


echo getSeason('yyyy-mm-dd'); // '2016-10-05'일 경우 2000 리턴

 

위와 같은 코드로 직접 일자를 넣어보고 테스트해보니까

함수는 정상적인 값을 리턴시키네요.

 

그렇다면 선택한 일자를 올바르게 전달하지 못하는 것일 수도 있는데,

js파일에서 일자를 올바르게 가져오는지 얼랏 찍어보시는 것이?

 

ps. 배포파일 기준으로 script.js 파일에서 checkPrice 함수에서 확인해보시면 되겠습니다~

다시 한번 아래 과정을 거친 후에도 동일하다면

더이상 제가 드릴 답변은 없는 것 같네요 ㅠㅠ

 

1. write.skin.php 파일 상단부분에 아래 코드를 넣고 일자에 맞는 결과값을 리턴하는지 확인


include_once($board_skin_path . '/skin.function.php');
echo getSeason($select);

 

2. script.js 파일 > checkPrice 함수에서 $select 값이 check.ajax.php 파일로  잘 전달하는지 확인

 

3. check.ajax.php 파일에서 $select 값을 잘 전달받았는지 확인

테스트서버 있으시면 설치후에 쪽지로 ftp랑 관리자정보 줘보세요.

한번 살펴봐 드릴 수 있습니다. 

위에 질문드렸던 마지막 구간 인식 문제는 달력스킨에서의 문제였는데 잘못 질문을 드렸습니다;

바쁘실텐데 확인까지 해 주신다고 하시니 힘이 납니다.
그리고 테스트 서버에 설치전에 죄송하지만 한번 먼저 소스 확인 부탁드립니다.

감사합니다


// 선택한 일자가 성수기인지를 추출한다 (준성수기:busy1, 성수기 :busy2, 극성수기:busy3, 비성수기 : nobusy)
function getSeason($select)
{
  global $OBJECT ;
	$result = "nobusy";
	
	$arr1 = explode(',', $OBJECT[g_stay_season_1]);
	$max1 = count($arr1);
	for($i = 0; $i < $max1; $i++)
	{
		list($open1, $close1) = explode('~', $arr1[$i]);
		if($open1 <= $select && $select <= $close1)
		{
		  echo $select ;
			$result = "busy1";
			break;
		}
	}
	
	$arr2 = explode(',', $OBJECT[g_stay_season_2]);
	$max2 = count($arr2);
	for($j = 0; $j < $max2; $j++)
	{
		list($open2, $close2) = explode('~', $arr2[$j]);
		if($open2 <= $select && $select <= $close2)
		{
			$result = "busy2";
			break;
		}
	}
	
	$arr3 = explode(',', $OBJECT[g_stay_season_3]);
	$max3 = count($arr3);
	for($k = 0; $k < $max3; $k++)
	{
		list($open3, $close3) = explode('~', $arr3[$k]);
		if($open3 <= $select && $select <= $close3)
		{
			$result = "busy3";
			break;
		}
	}	
	
	return $result;
}





// 선택한 일자의 이용요금을 추출한다 (이용요금을 추출할 수 있는 테이블의 필드명을 리턴한다)
function getPrice($select)
{
	$arr = array(
		'busy1' => array('weekend' => 'roomPrice_busy1', 'weekDay' => 'roomPrice_busy1'),
		'busy2' => array('weekend' => 'roomPrice_busy2', 'weekDay' => 'roomPrice_busy2'),
		'busy3' => array('weekend' => 'roomPrice_busy3', 'weekDay' => 'roomPrice_busy3'),
		'nobusy' => array('weekend' => 'roomPrice_week', 'weekDay' => 'roomPrice_default')
	);
	$season = getSeason($select);
	$week = getWeek($select);
	$result = $arr[$season][$week];
	return $result;
}






// 인원별, 기간별 이용요금을 산출한다
function getTotal($idx, $select, $stay, $person)
{
	global $g4 ;
	$result = 0;
	$RooM = sql_fetch("SELECT * FROM {$g4[goods_stay_room_table]} WHERE idx = '{$idx}'");
	for($i = 0; $i < $stay; $i++)
	{
		list($date) = mysql_fetch_array(sql_query("SELECT '{$select}' + INTERVAL {$i} DAY"));
		$field = getPrice($date);
		$result += $RooM[$field];
	}
	$result += ((($person - $RooM['roomUser']) * $RooM['roomPrice_moreA']));
	return $result;
}

위의 적어주신 3개의 함수코드는 올바르게 구현된 것으로 생각됩니다...

계속 귀찮게 해드려서 죄송합니다 ;;;

원인은 찾은것 같아서 다시 한번 도움을 청합니다.


$OBJECT = sql_fetch(" SELECT * FROM {$g4['goods_table']} WHERE g_code = '$GCODE' ");
=> 시즌정보를 담고 있는 OBJECT에 대한 정의입니다.

function getSeason($select)
{
global $OBJECT ;

$arr1 = explode(',', $OBJECT[g_stay_season_1]);
==> $arr1 = explode(',', "2016-11-17,2016-11-28,2016-11-30~2016-12-10");
~~~




$OBJECT 또는 2016-11-17,2016-11-28,2016-11-30~2016-12-10 를 문자열로 제대로 인식을 못하는게 아닐까 생각됩니다

$arr1를 $OBJECT[g_stay_season_1 로 불러와서 하면 기본값으로 돌아갑니다.

$arr1를 실제값 "2016-11-17,2016-11-28,2016-11-30~2016-12-10" 로 돌리면 금액이 제대로 찍힙니다.


그런데... 해결책을 못찾겠습니다 ㅜㅜ;;;;

답변을 작성하시기 전에 로그인 해주세요.
전체 123,669 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT