영카트 배송비 질문입니다.
본문
몇개의 상품만 "유료배송" 으로 설정 해놨는데
해당 상품들을 장바구니에 담으면 배송비가 각 상품마다 계산되어 합산됩니다.
유료배송으로 따로 설정한 상품을 장바구니에 상품을 담으면 배송비를 한개로 처리할수 없을까요?
답변 2
전체 혹은 유료 합산만 기본기능에 있습니다. 해당기능은 따로 개발하셔야합니다
"유료배송"으로 설정된 상품을 장바구니에 담았을 때,
배송비가 개별적으로 합산되지 않고 단일 배송비로 처리되도록 구현한다는 것인가요.
배송비를 계산하는 단계에서 중복 계산을 방지하고,
특정 조건을 만족하는 상품이 포함된 경우
한 번만 배송비를 추가하도록 코드를 수정하시면 되지 않을까요.
★ 개요
shop/cart.php : 장바구니 상품에 is_paid_shipping 필드 추가
lib/shop.lib.php : 배송비 계산 로직 수정
shop.item.php : 상품 데이터에 유료배송 조건 추가
★ 코딩 예시 (예시 파일들은 [정식버전]그누보드(영카트) 5.6.4를 기준으로 함)
- shop/cart.php 파일에서 장바구니 데이터를 처리하는 로직을 확인
또는 관련 함수(shop.lib.php의 get_delivery_cost() 함수)
- 배송비가 단일로 처리되도록 로직을 수정
*lib/shop.lib.php에 조건을 추가하여 특정 상품이 장바구니에 포함되어 있는지 확인
*장바구니 데이터를 순회하면서 유료배송 상품이 하나라도 발견되면
플래그($delivery_included와 같은 변수)를 설정하고 추가 배송비 계산을 건너뜁니다.
- shop.lib.php 파일의 get_delivery_cost() 함수 내 코드를 다음과 같이 수정
function get_delivery_cost($cart_items) {
$delivery_cost = 0;
$delivery_included = false; // 중복 계산 방지 플래그
foreach ($cart_items as $item) {
if ($item['is_paid_shipping']) {
if (!$delivery_included) {
$delivery_cost += $item['delivery_cost'];
$delivery_included = true; // 배송비 한 번만 추가
}
}
}
return $delivery_cost;
}
- 상품 데이터에서 is_paid_shipping 필드를 확인하는 로직을 추가
이는 shop.item.php 파일에서 상품 데이터를 읽어올 때 설정
function set_paid_shipping_flag($item) {
if ($item['shipping_type'] === 'paid') {
$item['is_paid_shipping'] = true;
} else {
$item['is_paid_shipping'] = false;
}
return $item;
}
!-->!-->