Drupal Commerce Form Validate

有時候製作commerce的時候會遇到一些購買上數量限制,這個時候就必須要自己去寫自己的validate,畢竟這種事情是沒有模組可以幫你的,這個時候我們就必須要create自己的module

首先我們先create自己的module,然後就要去查一下相關的hook
1.hook_form_alter
2.hook_validate

function hellosanta_form_alter(&$form, &$form_state, $form_id)
 {
    //dpm($form);
    if($form_id=='views_form_commerce_cart_form_default'){
         $form['#validate'][] = 'hellosanta_batch_commerce_form_validate'; //新增一個自己的validate
    }
 }

function hellosanta_batch_commerce_form_validate(&$form, $form_state) {
    //dpm($form_state);
    $line_item_array=$form_state['order']->commerce_line_items['und'];  //將訂單內的line item用變數裝起來
    //dpm($line_item_array);
    $edit_quantity_array=$form_state['values']['edit_quantity'];  //將quantity用變數裝起來
    //dpm($edit_quantity_array);
    foreach ($line_item_array as $key => $value) {  //使用迴圈將load進數量
        $line_id=$value['line_item_id'];
        $line=commerce_line_item_load($line_id);  //用line id 載入line itemt
        $product_id=$line->commerce_product['und'][0]['product_id'];
        $product=commerce_product_load($product_id);  //用product id 載入 product
        $pre_count=isset($product->field_per_count_limit['und'][0]['value'])?($product->field_per_count_limit['und'][0]['value']):NULL; //判斷是否有值
        $pre_tt=isset($product->field_total_count['und'][0]['value'])?($product->field_total_count['und'][0]['value']):NULL;   //判斷是否有值
        $product_title=$product->title;
        if ($form_state['clicked_button']['#id'] == 'edit-checkout' && $edit_quantity_array[$key]>$pre_count) {
            form_set_error('quantity',t("很抱歉 $product_title 一次最多只能訂購 $pre_count 條"));
        }
        if($form_state['clicked_button']['#id'] == 'edit-checkout' && $edit_quantity_array[$key]>$pre_tt){
            form_set_error('quantity',t("很抱歉 $product_title 今日只剩下 $pre_tt 條"));
        }
    }
 }

以上這些條件寫完就可以測試validate是否成功嚕