영카트 배송비 질문입니다.
본문
몇개의 상품만 "유료배송" 으로 설정 해놨는데
해당 상품들을 장바구니에 담으면 배송비가 각 상품마다 계산되어 합산됩니다.
유료배송으로 따로 설정한 상품을 장바구니에 상품을 담으면 배송비를 한개로 처리할수 없을까요?
답변 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;
}
★ 플러그인 또는 커스터마이징이 적용된 프로젝트에서는
예상치 못한 결과가 발생할 가능성이 있음을 염두에 두시기 바랍니다.
"""
기존 코드를 직접 수정하지 않고 새로운 함수를 작성하거나 중간 레이어를 추가해 기존 로직을 확장하여
배송비 계산 로직을 구현할 수 있습니다.
이를 통해 기존 함수와의 호환성을 유지하며, 플러그인이나 커스터마이징과 충돌하지 않도록 주의합니다.
새로운 함수는 독립적으로 관리하거나 별도의 파일로 분리하여 호출하도록 설계하고,
테스트 단계에서 기존 기능과 새로운 기능이 병렬로 정상 작동하는지 검증합니다.
추가로, A/B 테스트를 통해 실제 서비스 환경에서도 안정적인 동작하는지을 확인합니다.
"""