Tại lần đầu tiên tôi đã cố gắng để trả lời câu hỏi của bạn sử dụng quy tắc và userpoints module, nhưng tôi thấy rằng khi thêm điểm Grant cho một người dùng như hành động không có chọn dữ liệu đó để lựa chọn những người dùng đã tạo ra sản phẩm. Tôi đã tìm thấy bộ chọn dữ liệu để chọn người dùng là chủ sở hữu đơn hàng, nhưng đó không phải là yêu cầu của bạn. (Đó là lý do tại sao tôi làm rõ điều này trong các bình luận).
Tôi tìm thấy một giải pháp mô-đun cho câu hỏi của bạn. Mô-đun sử dụng hook_c Commerce_checkout_complete () . Từ trang hook:
Cho phép các mô-đun thực hiện logic nghiệp vụ khi đơn hàng hoàn thành kiểm tra.
Móc này trùng với sự kiện "Khách hàng hoàn thành thanh toán". Chỉ nên thực hiện logic nghiệp vụ khi điều này được gọi, chẳng hạn như cập nhật trạng thái đơn hàng, gán đơn hàng cho tài khoản người dùng hoặc gửi e-mail thông báo. Thay vào đó, tương tác với người dùng nên xảy ra thông qua các tấm thanh toán trên trang hoàn thành thanh toán.
Đây là mã hóa của mô-đun tôi thiết kế:
Tập tin YOUMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
CẬP NHẬT
Theo đề xuất của Clive , tôi đã thay đổi tệp mô-đun để mô-đun tùy chỉnh này cũng sẽ hoạt động với các trang web đa ngôn ngữ.
Tập tin YOUMODULE.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);
}
}
}
Liên kết tham khảo:
userpoint_userpointapi ($ params)
API thương mại_checkout
Commerce_line_item_load ($ line_item_id)
Commerce_product_load ($ sản phẩm_id)
Điểm người dùng: trừ điểm theo chương trình
Commerce_currency_amount_to_decimal ()