ในตอนแรกที่ผมพยายามที่จะตอบคำถามของคุณโดยใช้กฎและuserpointsโมดูล แต่ผมเห็นว่าในขณะที่การเพิ่มคะแนนให้กับผู้ใช้ในขณะที่การดำเนินการไม่มีตัวเลือกข้อมูลดังกล่าวสำหรับการเลือกผู้ใช้ที่ได้สร้างสินค้า ฉันพบตัวเลือกข้อมูลสำหรับการเลือกผู้ใช้ที่เป็นเจ้าของคำสั่งซื้อ แต่นั่นไม่ใช่ความต้องการของคุณ (นั่นคือเหตุผลที่ฉันชี้แจงเรื่องนี้ในความคิดเห็น)
ฉันพบโซลูชันโมดูลสำหรับคำถามของคุณ การใช้โมดูลhook_commerce_checkout_complete () จากหน้า hook:
อนุญาตให้โมดูลดำเนินการตรรกะทางธุรกิจเมื่อคำสั่งซื้อเช็คเอาต์เสร็จสมบูรณ์
เบ็ดนี้ตรงกับเหตุการณ์ "ลูกค้าชำระเงินเสร็จสมบูรณ์" ควรดำเนินการตรรกะทางธุรกิจเฉพาะเมื่อมีการเรียกใช้เช่นการอัปเดตสถานะคำสั่งซื้อการกำหนดคำสั่งให้กับบัญชีผู้ใช้หรือส่งอีเมลแจ้งเตือน การโต้ตอบกับผู้ใช้ควรเกิดขึ้นผ่านบานหน้าต่างชำระเงินแทนในหน้าเสร็จสิ้นการชำระเงิน
นี่คือการเข้ารหัสของโมดูลที่ฉันออกแบบ:
ไฟล์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 ()