영카트 배송비 관련 추가 질문드립니다.
본문
안녕하세요 sir 회원님들
아까 물어본 내용이 모호한 부분이 있어서 정리를하고
문제 해결에 필요한 sql문을 수정하기위해 도움을 요청하고자 한번더 죄송하지만 질문올립니다;
현재 제작중인 쇼핑몰은 해외배송(해외상품을 배송)과 국내배송 2가지가 있고
배송정책으로는
1) 해외배송은 무조건 8,900원 부과(수량상관없이 ex: 해외배송3개 주문시 배송비는 8900원)
2) 국내배송은 기본배송비 2,500원, 3만원 이상 구매시 무료배송
2가지 정책으로 운영될 예정입니다.
여기서 1차로 정리를하자면
1)번
-> 해결 : 쇼핑몰 기본 설정 의 금액별차등옵션을 이용해 배송비 상한가를 천만원으로 높이고
배송비를 8,900원으로 하는 방법을 우회적으로 이용하여 1번문제 해결
2)번
-> 미해결 : 국내배송 카테고리(분류)에 있는 상품들을 조건부 무료배송 처리를 통해 문제를 해결하려했으나 영카트 조건부 무료배송 옵션은 개별상품 배송비설정으로 적용이 되서 문제를 해결하지 못했습니다.
(ex: 국내배송 A ,B제품을 시킬시 total은 3만원이 넘으나 개별상품 배송비설정적용으로 2500*2= 5000 으로 계산되는 상황입니다.)
문제를 해결하기 위해 배송비를 구하는 함수 부분과 SQL문을 찾아보니 다음과 같습니다.
// 배송비 구함
function get_sendcost($cart_id, $selected=1)
{
global $default, $g5;
$send_cost = 0;
$total_price = 0;
$total_send_cost = 0;
$diff = 0;
$sql = " select distinct it_id
from {$g5['g5_shop_cart_table']}
where od_id = '$cart_id'
and ct_send_cost = '0'
and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )
and ct_select = '$selected' ";
$result = sql_query($sql);
for($i=0; $sc=sql_fetch_array($result); $i++) {
// 합계
$sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price,
SUM(ct_qty) as qty
from {$g5['g5_shop_cart_table']}
where it_id = '{$sc['it_id']}'
and od_id = '$cart_id'
and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )
and ct_select = '$selected'";
$sum = sql_fetch($sql);
$send_cost = get_item_sendcost($sc['it_id'], $sum['price'], $sum['qty'], $cart_id);
if($send_cost > 0)
$total_send_cost += $send_cost;
if($default['de_send_cost_case'] == '차등' && $send_cost == -1) {
$total_price += $sum['price'];
$diff++;
}
}
$send_cost = 0;
if($default['de_send_cost_case'] == '차등' && $total_price >= 0 && $diff > 0) {
// 금액별차등 : 여러단계의 배송비 적용 가능
$send_cost_limit = explode(";", $default['de_send_cost_limit']);
$send_cost_list = explode(";", $default['de_send_cost_list']);
$send_cost = 0;
for ($k=0; $k<count($send_cost_limit); $k++) {
// 총판매금액이 배송비 상한가 보다 작다면
if ($total_price < preg_replace('/[^0-9]/', '', $send_cost_limit[$k])) {
$send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);
break;
}
}
}
return ($total_send_cost + $send_cost);
}
위의 SQL문의 결과는 상품코드를 리턴합니다.(상품3개 주문시 3개의 상품코드 리턴)
function get_item_sendcost($it_id, $price, $qty, $cart_id)
{
global $g5, $default;
$sql = " select it_id, it_sc_type, it_sc_method, it_sc_price, it_sc_minimum, it_sc_qty
from {$g5['g5_shop_cart_table']}
where it_id = '$it_id'
and od_id = '$cart_id'
order by ct_id
limit 1 ";
$ct = sql_fetch($sql);
if(!$ct['it_id'])
return 0;
if($ct['it_sc_type'] > 1) {
if($ct['it_sc_type'] == 2) { // 조건부무료
if($price >= $ct['it_sc_minimum'])
$sendcost = 0;
else
$sendcost = $ct['it_sc_price'];
} else if($ct['it_sc_type'] == 3) { // 유료배송
$sendcost = $ct['it_sc_price'];
} else { // 수량별 부과
if(!$ct['it_sc_qty'])
$ct['it_sc_qty'] = 1;
$q = ceil((int)$qty / (int)$ct['it_sc_qty']);
$sendcost = (int)$ct['it_sc_price'] * $q;
}
} else if($ct['it_sc_type'] == 1) { // 무료배송
$sendcost = 0;
} else {
$sendcost = -1;
}
return $sendcost;
}
위의 SQL문의 결과는 상품코드,배송비 유형, 상품 배송비결제,상품 배송비,상품 배송비 무료 최소금액,주문수량
을 리턴합니다.
//////////////////
SQL문을 고치고 함수를 수정해서 조건부 무료배송을 설정한 국내배송상품들의 total값이 3만원을 넘으면
무료배송으로(배송비: 0 ) 처리를해야하는데
이부분에서 개인적으로 해결에 어려움을 겪고 있습니다.
제작의뢰를 맡기라는 의견을 주신분도 있으나 현실적으로 정말 그부분은 어려움이 있어서 이렇게
죄송스럽게도 질문글을 올립니다.
코드로 조언및 도움 부탁드립니다..
답변 1
간략하게 설명 드리면
카트에 담긴 상품 테이블을 조회해서 $it[ca_id] 기준으로 국내상품인지 비교해서
국내 상품일 경우는 위에 얘기하신 조건을 넣으면 됩니다.
다만 여기서 문제는 해외상품과 국내상품을 같이 장바구니에 담았을 경우인거 같습니다.
그럴 경우는 비용을 합산해야 하니깐요 ^^;;
그리고 관리자에서도 합산으로 들어온건지에 대한 내역도 보여줘야 하니깐..
위에 어떤 분이 조언하시는 것처럼 제작의뢰로 넘기시는게 좋으실꺼 같습니다 ^^;;