2012-12-10 4 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는 order 객체에 간단하게 추가 할 수있는 광고 항목 배열을 반환합니다. 나는 그것이 당신의 지불 방법 안에서는 잘 돌아갈 지 확신하지 못하지만 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; 
}