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是否成功嚕