처음 사용하여 질문에 대답하려 I에서 규칙 및 userpoints 모듈 만 추가하는 동안 것을 나는 보았다 사용자에게 부여 포인트를 작업으로 제품을 생성 한 사용자를 선택하는 이러한 데이터 선택이 없습니다. 주문 소유자 인 사용자를 선택하기위한 데이터 선택기를 찾았지만 이는 귀하의 요구 사항이 아닙니다. (그래서 나는 이것을 주석으로 명확히했다.)
귀하의 질문에 대한 모듈 솔루션을 찾았습니다. 모듈은 hook_commerce_checkout_complete ()를 사용합니다 . 훅 페이지에서 :
주문이 체크 아웃을 완료 할 때 모듈이 비즈니스 로직을 수행 할 수 있도록합니다.
이 후크는 "고객 완료 체크 아웃"이벤트와 일치합니다. 주문 상태 업데이트, 주문을 사용자 계정에 할당 또는 알림 이메일 전송과 같이 비즈니스 로직 만 호출해야합니다. 대신 결제 완료 페이지의 결제 창을 통해 사용자와의 상호 작용이 이루어져야합니다.
이것은 내가 디자인 한 모듈의 코딩입니다.
YOURMODULE.info 파일 :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
업데이트 Clive 에서
제안한 대로이 사용자 정의 모듈이 다국어 사이트에서도 작동하도록 모듈 파일을 변경했습니다.
YOURMODULE.module 파일 :
/**
* Implements hook_commerce_checkout_complete().
*/
function YOURMODULE_commerce_checkout_complete($order) {
// Iterate through every commerce line item added in product.
foreach (field_get_items('commerce_order', $order, 'commerce_line_items') as $line_item_id) {
// Load commerce line item by line item id.
$line_item = commerce_line_item_load($line_item_id['line_item_id']);
// We do not want to include shipping cost in userpoints.
if ($line_item->type != 'shipping') {
// Load commerce product by product id.
$product = commerce_product_load(field_get_items('commerce_line_item', $line_item, 'commerce_product')[0]['product_id']);
// Create parameters.
$params = array(
'uid' => $product->uid,
'points' => commerce_currency_amount_to_decimal(field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['amount'], field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['currency_code']),
);
// Grant userpoints programmatically.
userpoints_userpointsapi($params);
}
}
}
참조 링크 :
userpoints_userpointsapi ($ params)
commerce_checkout API
commerce_line_item_load ($ line_item_id)
commerce_product_load ($ product_id)
사용자 포인트 : 프로그래밍 방식으로 포인트 공제
commerce_currency_amount_to_decimal ()