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

영카트 배송비 관련 추가 질문드립니다. 채택완료

slingshot 8년 전 조회 3,422

안녕하세요 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문을 찾아보니 다음과 같습니다. 



</span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">// 배송비 구함</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">function get_sendcost($cart_id, $selected=1)</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">{</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    global $default, $g5;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $send_cost = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $total_price = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $total_send_cost = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $diff = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    <span style="background-color: rgb(255, 239, 0);">$sql = " select distinct it_id</span></span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                from {$g5['g5_shop_cart_table']}</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                where od_id = '$cart_id'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                  and ct_send_cost = '0'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                  and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                  and ct_select = '$selected' ";</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $result = sql_query($sql);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    for($i=0; $sc=sql_fetch_array($result); $i++) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        // 합계</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        $sql = " select SUM(IF(io_type = 1, (io_price * ct_qty), ((ct_price + io_price) * ct_qty))) as price,</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                        SUM(ct_qty) as qty</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                    from {$g5['g5_shop_cart_table']}</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                    where it_id = '{$sc['it_id']}'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                      and od_id = '$cart_id'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                      and ct_status IN ( '쇼핑', '주문', '입금', '준비', '배송', '완료' )</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                      and ct_select = '$selected'";</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        $sum = sql_fetch($sql);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        $send_cost = get_item_sendcost($sc['it_id'], $sum['price'], $sum['qty'], $cart_id);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        if($send_cost > 0)</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $total_send_cost += $send_cost;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        if($default['de_send_cost_case'] == '차등' && $send_cost == -1) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $total_price += $sum['price'];</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $diff++;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">   <span style="background-color: rgb(255, 239, 0);"> $send_cost = 0;</span></span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">    if($default['de_send_cost_case'] == '차등' && $total_price >= 0 && $diff > 0) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        // 금액별차등 : 여러단계의 배송비 적용 가능</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        $send_cost_limit = explode(";", $default['de_send_cost_limit']);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        $send_cost_list  = explode(";", $default['de_send_cost_list']);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        $send_cost = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        for ($k=0; $k<count($send_cost_limit); $k++) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">            // 총판매금액이 배송비 상한가 보다 작다면</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">            if ($total_price < preg_replace('/[^0-9]/', '', $send_cost_limit[$k])) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                $send_cost = preg_replace('/[^0-9]/', '', $send_cost_list[$k]);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                break;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">            }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">    }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">    return ($total_send_cost + $send_cost);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">}</span></span></p><p style="word-break: break-all; font-family: Arial, 돋움, Dotum; font-size: 14.004px;">


위의 SQL문의 결과는 상품코드를 리턴합니다.(상품3개 주문시 3개의 상품코드 리턴)


 

</p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">function get_item_sendcost($it_id, $price, $qty, $cart_id)</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">{</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    global $g5, $default;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    <span style="background-color: rgb(255, 239, 0);">$sql = " select it_id, it_sc_type, it_sc_method, it_sc_price, it_sc_minimum, it_sc_qty</span></span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                from {$g5['g5_shop_cart_table']}</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                where it_id = '$it_id'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                  and od_id = '$cart_id'</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                order by ct_id</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                limit 1 ";</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    $ct = sql_fetch($sql);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    if(!$ct['it_id'])</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        return 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">    if($ct['it_sc_type'] > 1) {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">        if($ct['it_sc_type'] == 2) { // 조건부무료</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">            if($price >= $ct['it_sc_minimum'])</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                $sendcost = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">            else</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px; background-color: rgb(255, 239, 0);">                $sendcost = $ct['it_sc_price'];</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        } else if($ct['it_sc_type'] == 3) { // 유료배송</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $sendcost = $ct['it_sc_price'];</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        } else { // 수량별 부과</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            if(!$ct['it_sc_qty'])</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">                $ct['it_sc_qty'] = 1;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $q = ceil((int)$qty / (int)$ct['it_sc_qty']);</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">            $sendcost = (int)$ct['it_sc_price'] * $q;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    } else if($ct['it_sc_type'] == 1) { // 무료배송</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        $sendcost = 0;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    } else {</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">        $sendcost = -1;</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">    }</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">
</span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">   <span style="background-color: rgb(255, 239, 0);"> return $sendcost;</span></span></span></p><p style="word-break: break-all;"><span style="font-family: Arial, 돋움, Dotum;"><span style="font-size: 14.004px;">}</span></span></p><p style="word-break: break-all; font-family: Arial, 돋움, Dotum; font-size: 14.004px;">


위의 SQL문의 결과는 상품코드,배송비 유형, 상품 배송비결제,상품 배송비,상품 배송비 무료 최소금액,주문수량 

을 리턴합니다.



//////////////////


SQL문을 고치고 함수를 수정해서 조건부 무료배송을 설정한  국내배송상품들의 total값이 3만원을 넘으면

무료배송으로(배송비: 0 ) 처리를해야하는데 


이부분에서 개인적으로 해결에 어려움을 겪고 있습니다.


제작의뢰를 맡기라는 의견을 주신분도 있으나 현실적으로 정말 그부분은 어려움이 있어서 이렇게 

죄송스럽게도 질문글을 올립니다.

코드로 조언및 도움 부탁드립니다..




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

답변 1개

M
8년 전

간략하게 설명 드리면

 

카트에 담긴 상품 테이블을 조회해서 $it[ca_id] 기준으로 국내상품인지 비교해서

 

국내 상품일 경우는 위에 얘기하신 조건을 넣으면 됩니다.

 

다만 여기서 문제는 해외상품과 국내상품을 같이 장바구니에 담았을 경우인거 같습니다.

 

그럴 경우는 비용을 합산해야 하니깐요 ^^;;

 

그리고 관리자에서도 합산으로 들어온건지에 대한 내역도 보여줘야 하니깐..

 

위에 어떤 분이 조언하시는 것처럼 제작의뢰로 넘기시는게 좋으실꺼 같습니다 ^^;;

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

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

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

로그인