테스트 사이트 - 개발 중인 베타 버전입니다

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

강가딘11 9년 전 조회 3,008

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

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

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

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

 

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

 

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

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

 

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

댓글을 작성하려면 로그인이 필요합니다.

답변 6개

채택된 답변
+20 포인트
o
9년 전

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

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

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

*변경전

</p><p><font face="Courier New">if</font><code class="php plain">(</code><code class="php variable">$open1</code> <code class="php plain"><= </code><code class="php variable">$select</code> <code class="php plain">&& </code><code class="php variable">$select</code> <code class="php plain"><= </code><code class="php variable">$close1</code><code class="php plain">)</code></p><p><code class="php plain"><font face="돋움">


* 변경후

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


 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

o
9년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

강가딘11
9년 전
계속 귀찮게 해드려서 죄송합니다 ;;;

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


$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" 로 돌리면 금액이 제대로 찍힙니다.


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

댓글을 작성하려면 로그인이 필요합니다.

o
9년 전

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

감사합니다

[code]
// 선택한 일자가 성수기인지를 추출한다 (준성수기: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;
}
[/code]



[code]
// 선택한 일자의 이용요금을 추출한다 (이용요금을 추출할 수 있는 테이블의 필드명을 리턴한다)
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;
}

[/code]



[code]
// 인원별, 기간별 이용요금을 산출한다
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;
}
[/code]

댓글을 작성하려면 로그인이 필요합니다.

o
9년 전

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

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

 

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

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

 

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

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

강가딘11
9년 전
getSeason 함수에서 | 로 explode 한 배열의 반복문에서 마지막 구간만 인식하는것 같습니다

댓글을 작성하려면 로그인이 필요합니다.

o
9년 전

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

 

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

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

 

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

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

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

강가딘11
9년 전
날짜는 제대로 찍힙니다 ;;;

댓글을 작성하려면 로그인이 필요합니다.

o
9년 전

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

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

 

각설하고...

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

강가딘11
9년 전
와~ 원제작자께서 답글을 달아주셨네요
해결을 못해서 죽을맛이었는데.. 정말 반갑고 감사합니다

소스 올려드리겠습니다.

[code]
$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;
}
[/code]


수정한 getPrice 함수입니다.
[code]
// 선택한 일자의 이용요금을 추출한다 (이용요금을 추출할 수 있는 테이블의 필드명을 리턴한다)
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;
}
[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인