Zuerst habe ich versucht, Ihre Frage mithilfe des Moduls Regeln und Benutzerpunkte zu beantworten , aber ich habe festgestellt , dass es beim Hinzufügen von Grant-Punkten zu einem Benutzer als Aktion keine solche Datenauswahl für die Auswahl des Benutzers gibt, der das Produkt erstellt hat. Ich habe die Datenauswahl für die Auswahl des Benutzers gefunden, der Eigentümer der Bestellung ist, aber das ist nicht Ihre Anforderung. (Deshalb habe ich dies in Kommentaren klargestellt).
Ich habe eine Modullösung für Ihre Frage gefunden. Das Modul verwendet hook_commerce_checkout_complete () . Von der Hook-Seite:
Ermöglicht Modulen die Ausführung von Geschäftslogik, wenn eine Bestellung die Kaufabwicklung abgeschlossen hat.
Dieser Hook fällt mit dem Ereignis "Kunde schließt Kaufabwicklung ab" zusammen. Wenn dies aufgerufen wird, sollte nur Geschäftslogik ausgeführt werden, z. B. das Aktualisieren des Bestellstatus, das Zuweisen der Bestellung zu einem Benutzerkonto oder das Senden von Benachrichtigungs-E-Mails. Die Interaktion mit dem Benutzer sollte stattdessen über die Checkout-Bereiche auf der Checkout-Abschlussseite erfolgen.
Dies ist die Codierung des Moduls, das ich entworfen habe:
Datei YOURMODULE.info :
name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x
UPDATE
Wie von Clive vorgeschlagen , habe ich die Moduldatei so geändert, dass dieses benutzerdefinierte Modul auch mit mehrsprachigen Sites funktioniert.
YOURMODULE.module Datei:
/**
* 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);
}
}
}
Referenzlinks:
userpoints_userpointsapi ($ params)
Commerce_checkout-API
Commerce_line_item_load ($ line_item_id)
Commerce_product_load ($ product_id)
Benutzerpunkte: Punkte programmgesteuert abziehen
Commerce_Currency_amount_to_decimal ()