最初,我尝试使用“ 规则和用户点”模块回答您的问题,但是我看到,在将“ 授予点”作为操作添加到用户时,没有这样的数据选择器来选择创建产品的用户。我找到了用于选择订单所有者的用户的数据选择器,但这不是您的要求。(这就是为什么我在评论中对此进行了澄清)。
我找到了您问题的模块解决方案。该模块使用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()