Ajouter un élément de campagne indiquant le coût total

10

Comment puis-je ajouter un élément de campagne dans Ubercart 2 qui additionne le coût total de tous les articles, pas le prix de vente? J'ai essayé de cloner le hook d'élément de campagne générique et d'ajouter quelque chose comme ceci pour le rappel:

for each($op->products as item){
  $cost += $item->cost;
}

J'ai besoin que cet élément de campagne apparaisse dans le panier (j'utilise le panier ajax), dans le volet de commande avant que l'utilisateur ne termine la commande, et dans les e-mails que le propriétaire du magasin et l'utilisateur reçoivent. Dois-je créer un petit module pour ce code en dehors de uc_order? Je ne me souviens pas exactement du code tel qu'il est sur mon ordinateur de travail, mais je pense que je le mets au mauvais endroit. Merci pour tous les conseils.

user2591
la source

Réponses:

1

J'ai créé un élément de ligne à l'aide de hook_uc_line_item (), puis j'ai ajouté l'élément de ligne dans hook_uc_order ().

Les produits finaux ressemblent à:

/*
 * 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);
      }
    }
  }
}
danielson317
la source