Ubercart 2에서 판매 가격이 아닌 모든 항목의 총 비용을 합산하는 광고 항목을 추가하려면 어떻게해야합니까? 일반 광고 항목 후크를 복제하고 콜백에 다음과 같이 추가하려고했습니다.
for each($op->products as item){
$cost += $item->cost;
}
이 광고 항목이 장바구니 (아약스 장바구니를 사용하고 있음), 사용자가 결제를 완료하기 전에 주문 창 및 상점 소유자와 사용자가받는 이메일에 표시되어야합니다. uc_order 외부에서이 코드에 대한 작은 모듈을 만들어야합니까? 작업 컴퓨터에있는 코드와 정확히 일치하는 코드는 기억 나지 않지만 잘못된 위치에 넣는 것 같습니다. 포인터 주셔서 감사합니다.
답변
hook_uc_line_item ()을 사용하여 광고 항목을 만든 다음 hook_uc_order ()에 광고 항목을 추가했습니다.
최종 제품은 다음과 같습니다.
/*
* Implement hook_uc_line_item()
*/
function my_module_uc_line_item() {
$items[] = array(
'id' => 'handling_fee',
'title' => t('Handling Fee'),
'weight' => 5,
'stored' => TRUE,
'calculated' => TRUE,
'display_only' => FALSE,
);
return $items;
}
/**
* Implement hook_uc_order()
*/
function my_module_uc_order($op, $order, $arg2) {
// This is the handling fee. Add only if the user is a professional and there
// are shippable products in the cart.
if ($op == 'save') {
global $user;
if (in_array('professional', array_values($user->roles))) {
// Determine if the fee is needed. If their are shippable items in the cart.
$needs_fee = FALSE;
foreach ($order->products as $pid => $product) {
if ($product->shippable) {
$needs_fee = TRUE;
}
}
$line_items = uc_order_load_line_items($order);
// Determine if the fee has already been applied.
$has_fee = FALSE;
foreach ($line_items as $key => $line_item) {
if ($line_item['type'] == 'handling_fee') {
$has_fee = $line_item['line_item_id'];
}
}
// If the cart does not already have the fee and their are shippable items
// add them.
if ($has_fee === FALSE && $needs_fee) {
uc_order_line_item_add($order->order_id, 'handling_fee', "Handling Fee", 9.95 , 5, null);
}
// If it has a fee and does not need one delete the fee line item.
elseif ($has_fee !== FALSE && !$needs_fee) {
uc_order_delete_line_item($has_fee);
}
}
}
}