총 비용을 표시하는 광고 항목 추가 사용하고 있음), 사용자가 결제를 완료하기 전에 주문

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);
      }
    }
  }
}


답변