Сначала я попытался ответить на ваш вопрос, используя модуль правил и пользовательских точек , но увидел, что при добавлении баллов Grant пользователю в качестве действия такого селектора данных для выбора пользователя, создавшего продукт, не существует. Я нашел селектор данных для выбора пользователя, который является владельцем заказа, но это не ваше требование. (Вот почему я пояснил это в комментариях).
Я нашел модульное решение вашего вопроса. Модуль использует hook_commerce_checkout_complete () . Со страницы хука:
Позволяет модулям выполнять бизнес-логику, когда заказ завершает оформление заказа.
Этот хук совпадает с событием «Заказчик завершает оформление заказа». При этом должна выполняться только бизнес-логика, например, обновление статуса заказа, назначение заказа учетной записи пользователя или отправка уведомлений по электронной почте. Вместо этого взаимодействие с пользователем должно происходить через панели оформления заказа на странице завершения оформления заказа.
Это кодировка модуля, который я разработал:
YOURMODULE.info файл:
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
ОБНОВЛЕНИЕ
Как предложил Клайв , я изменил файл модуля, чтобы этот пользовательский модуль также работал с многоязычными сайтами.
Файл 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)
API commerce_checkout
commerce_line_item_load ($ LINE_ITEM_ID)
commerce_product_load ($ product_id)
Точки пользователя: вычитать очки программно
commerce_currency_amount_to_decimal ()