Na początku próbowałem odpowiedzieć na twoje pytanie za pomocą modułu reguł i punktów użytkownika , ale zauważyłem, że podczas dodawania punktów Grant do użytkownika jako działania nie ma takiego selektora danych do wybierania użytkownika, który utworzył produkt. Znalazłem selektor danych do wybierania użytkownika, który jest właścicielem zamówienia, ale nie jest to twoje wymaganie. (Dlatego wyjaśniłem to w komentarzach).
Znalazłem modułowe rozwiązanie twojego pytania. Moduł używa hook_commerce_checkout_complete () . Ze strony haka:
Umożliwia modułom wykonywanie logiki biznesowej po zakończeniu realizacji zamówienia.
Ten hak zbiega się ze zdarzeniem „Klient kończy realizację zamówienia”. Po wywołaniu powinna być wykonywana tylko logika biznesowa, taka jak aktualizacja statusu zamówienia, przypisanie zamówienia do konta użytkownika lub wysyłanie powiadomień e-mail. Zamiast tego interakcja z użytkownikiem powinna odbywać się poprzez panele kasy na stronie zakończenia kasy.
Oto kodowanie zaprojektowanego przeze mnie modułu:
Plik YOURMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
AKTUALIZACJA
Jak zasugerował Clive , zmieniłem plik modułu, aby ten moduł niestandardowy działał również z witrynami wielojęzycznymi.
Plik 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);
}
}
}
Linki referencyjne:
userpoints_userpointsapi ($ params)
interfejs API commerce_checkout
commerce_line_item_load ($ line_item_id)
commerce_product_load ($ id_produktu)
Punkty użytkownika: programowo odejmij punkty
commerce_currency_amount_to_decimal ()