D7コマースクーポン/割引モジュールの使用。クーポンフィールドを必須にする必要があります。すべての注文には、クーポンコードを入力する必要があります。
フィールドには標準の「必須」チェックボックスはありません。条件付きフィールドモジュールを使用してみましたが、役に立ちませんでした。
これはhook_form_FORM_ID_alter()
で行う必要があります。
動的フォームIDをチェックするのでない限り、hook_form_alter()
は使用しません。この場合、hook_form_FORM_ID_alter()
を使用することをお勧めします。
その理由は、hook_form_alter()
はすべてのフォームレンダリングで呼び出され、hook_form_FORM_ID_alter()
はその特定のフォームがレンダリングされているときにのみ呼び出されるためです。
このコードを.module
ファイルに追加して、フィールドを必須にします。
/**
* Implements hook_form_FORM_ID_alter().
*/
function MY_MODULE_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
if (!empty($form['commerce_coupon']['coupon_code'])) {
$form['commerce_coupon']['coupon_code']['#required'] = TRUE;
}
}
Implements hook_form_BASE_FORM_ID_alter
ですが、ユーザーがクーポンフィールド内にランダムな文字列を入力した場合、ステップを渡すことができます。
この混乱を回避するには、フォームの変更を使用してクーポンフィールドを必須にし、カスタム検証を追加してクーポンが有効かどうかを確認する必要があります。
クーポンが有効でない場合、ユーザーはステップに留まり、コマースクーポンモジュールによって提供される同じエラーメッセージを受け取ります。
私はあなたのカスタムモジュール名が '[〜#〜] custom [〜#〜]であると仮定します
/**
* Implements hook_form_BASE_FORM_ID_alter().
*/
function CUSTOM_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
if (!empty($form['commerce_coupon']['coupon_code'])) {
// Set code as required.
$form['commerce_coupon']['coupon_code']['#required'] = TRUE;
$form['buttons']['continue']['#validate'][] = 'my_custom_coupon_validate';
}
}
/**
* Custom coupon validate.
*/
function my_custom_coupon_validate(&$form, &$form_state) {
$code = $form_state['input']['commerce_coupon']['coupon_code'];
$order = $form_state['order'];
$coupon = commerce_coupon_redeem_coupon_code($code, $order, $error);
if ($coupon) {
// Reload the order so it is not out of date.
$order = commerce_order_load($order->order_id);
// Recalculate discounts.
commerce_cart_order_refresh($order);
}
else {
form_set_error('coupon_code',$error);
}
}