2012-12-10 49 views
4

我不知道爲什麼這麼複雜,但我想要做的是在用戶更改Ubercart中的付款方式時在我的訂單中添加訂單項。我設法通過在我的付款方式中添加以下行來完成此操作。添加ubercart訂單項並更新訂單總計

uc_order_line_item_add($ order-> order_id,'pay at door','Pay at door',5);

這似乎添加了訂單項,但訂單總計並未更新。當我刷新頁面時,我可以看到在那裏添加的訂單項。顯然,我不想刷新屏幕,我希望在回撥支付方式期間顯示新訂單總額和訂單項。我想這是通過調用jquery實現的,但我在Google找不到任何有用的東西。

有人可以幫忙嗎?

回答

5

希望這個答案是不是太晚了你,但你有沒有試過如下:

$order->line_items[] = uc_order_line_item_add($order->order_id, 'Pay at door','Pay at door',5); 

的問題是,uc_order_line_item_add簡單地更新數據庫不被正在傳遞,也是目前訂單對象稍後用於計算總計等,謝天謝地uc_order_line_item_add返回一個行項目數組,可以簡單地附加到訂單對象。我不確定它可以在您的付款方式中使用,但它適用於我的hook_uc_order,在那裏我有類似的稅收問題沒有更新,直到第二次刷新。

在情況下,它可以幫助我完整的例子代碼如下:

<?php 

function my_module_uc_order($op, &$order, $arg2) { 
    switch ($op) { 
    case 'presave': 
     // using presave as taxes are calculated during save 
     $line_item_id = FALSE; 
     if (!is_array($order->line_items)) { 
     $order->line_items = array(); 
     } 
     else { 
     foreach ($order->line_items as $index => $line_item) { 
      if ($line_item['type'] == 'my_line_item') { 
      $line_item_id = $line_item['line_item_id']; 
      break; 
      } 
     } 
     } 

     if ($line_item_id === FALSE) { 
     // Add item. 
     // Dummy amount for testing. 
     $amount = 3; 
     // uc_order_line_item_add returns a line_item array so we can just add it to the order object. 
     $order->line_items[] = uc_order_line_item_add($order->order_id, 'my_line_item', 'My Item Title (added)', $amount); 
     // uc_order_line_item_add($order_id, $type, $title, $amount, $weight = NULL, $data = NULL). 
     } 
     else { 
     // Update item. 
     // Dummy amount for testing. 
     $amount = 4; 
     // uc_order_update_line_item($id, $title, $amount, $data = NULL). 
     uc_order_update_line_item($line_item_id, 'My Item Title (updated)', $amount); 
     // Manually modify amount. 
     $order->line_items[$index]['amount'] = $amount; 
     } 
     break; 
    } 
} 

/** 
* Implements hook_uc_line_item(). 
*/ 

function my_module_uc_line_item() { 
$items[] = array(
    'id' => 'my_line_item', 
    'title' => t('Custom text'), 
    'weight' => 0, 
    'default' => FALSE, 
    'stored' => TRUE, 
    'add_list' => TRUE, 
    'calculated' => TRUE, 
); 
return $items; 
}