チェックアウトプロセスを完了した後、アワードユーザーが欲しいです。このタスクでは、このモジュール(Commerce、UserPoints、Commerce Credits)を使用します。
15ドルの価格で商品を作成し、チェックアウトが完了した後にユーザーに報酬を与えるルールを作成します。チェックアウトが完了すると、ルールは正常に機能しますが、代わりにユーザーに1500ユーザーポイントが与えられます。15。コマースから小数を削除するモジュール(Commerce Price Decimals Formatter、Commerce Extra Price Formatters)を使用してみました。また、インターネットからいくつかのコードを使用してみましたが、すべて私の問題は解決しません。
誰かがこの問題の解決策を知っていますか?
それは私がインターネットで見つけたコードです:
<?php
/**
* Implements hook_commerce_currency_info_alter().
*/
function Zero_commerce_currency_info_alter(&$currencies, $langcode) {
$currencies['USD']['format_callback'] = 'Zero_rub_currency_format';
}
/**
* Currency format callback.
*/
function Zero_rub_currency_format($amount, $currency, $object) {
$round_amount = commerce_currency_round(abs($amount), $currency);
$price = number_format($round_amount, 0, $currency['decimal_separator'], $currency['thousands_separator']);
$replacements = array(
'@code_before' => $currency['code_placement'] == 'before' ? $currency['code'] : '',
'@symbol_before' => $currency['symbol_placement'] == 'before' ? $currency['symbol'] : '',
'@price' => $price,
'@symbol_after' => $currency['symbol_placement'] == 'after' ? $currency['symbol'] : '',
'@code_after' => $currency['code_placement'] == 'after' ? $currency['code'] : '',
'@negative' => $amount < 0 ? '-' : '',
'@symbol_spacer' => $currency['symbol_spacer'],
'@code_spacer' => $currency['code_spacer'],
);
return trim(t('@code_before@code_spacer@negative@symbol_before@price@symbol_spacer@symbol_after@code_spacer@code_after', $replacements));
}
それは私のルールです:
{ "rules_grantpointaftercheckout" : {
"LABEL" : "GrantPointAfterCheckOut",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "userpoints_rules", "commerce_checkout" ],
"ON" : { "commerce_checkout_complete" : [] },
"DO" : [
{ "data_convert" : {
"USING" : {
"type" : "integer",
"value" : [ "commerce-order:commerce-order-total:amount" ],
"rounding_behavior" : "down"
},
"PROVIDE" : { "conversion_result" : { "conversion_result" : "Conversion result" } }
}
},
{ "userpoints_action_grant_points" : {
"user" : [ "site:current-user" ],
"points" : [ "conversion-result" ],
"tid" : "0",
"entity" : [ "site:current-cart-order" ],
"operation" : "bla bla bla",
"display" : "1",
"moderate" : "approved"
}
}
]
}
}
Drupal Commerce に関する問題をご覧ください 価格金額の値の処理方法を改訂してください "。特にコメントnr37には、次のように記載されています。
価格フィールドには、価格の金額が整数として格納されます。
したがって、1500ドルセントの金額を四捨五入すると...まだ1500ですよね?そして、それはあなたが付与しているユーザーポイントの量です。そのため、ルールは実装されたとおりに機能します。付与されるユーザーポイントの量として1500という値を使用しています。
明らかに、次に行う必要があるのは、ルールを拡張して、最初に価格を100で割ることです(丸める前に)。使用しない場合は、その方法を知っていると思います このリンク ...ボーナスヒント:「 すべてのアイテムを合計する方法」の回答に含まれているルールの例をご覧くださいルールを使用したフィールドコレクションフィールドの例? "、特に「値の計算」ルールアクション。