Drupal Commerce alter checkout form and custom validate

转载 2016年06月01日 15:06:30

Drupal Commerce: How to alter the checkout form and how to add the custom validation

Commerce has its own API http://api.drupalcommerce.org/, that we have used it to adapt the checkout form to our requirements.

Description of the required functionality

In the billing information of an order we have added the fields “Request invoice” and “NIF/CIF” (ID). By default the field “Request invoice” is not checked and “NIF/CIF” is hidden and not required. When the buyer checks the field “Request invoice” the field “NIF/CIF” becomes visible and required.

Proposed solution

  1. Adding the code that changes the field “NIF/CIF” when the user checks “Request invoice”. By using hook_form_FORM_ID_alter(&$form, &$form_state, $form_id)
  2. Adding a callback to validate the form hook_commerce_checkout_pane_info_alter(&$checkout_panes)
  3. Adding the validation function commerce_billing_pane_validate(&$form, &$form_state, $checkout_pane, $order)

Step 1. Adding the alter form to add the behavior of the field. field_request_invoice

?
1
2
3
4
5
6
7
8
9
10
11
function example_form_commerce_checkout_form_checkout_alter(&$form, &$form_state, $form_id) {
  global $user;
  $form['customer_profile_billing']['field_cif_nif']['#states'] = array(
    'visible' => array(
      ':input[name="customer_profile_billing[field_request_invoice][und]"]' => array('checked' => TRUE),
    ),
    'required' => array(
      ':input[name="customer_profile_billing[field_request_invoice][und]"]' => array('checked' => TRUE),
    ),
  );
}

Step 2. Alter the customer_profile_billing panel to add the callback to the validation function

?
1
2
3
4
5
function example_commerce_checkout_pane_info_alter(&$checkout_panes) {
  if (isset($checkout_panes['customer_profile_billing'])) {
    $checkout_panes['customer_profile_billing']['callbacks']['checkout_form_validate'] = 'example_commerce_billing_pane_validate';
  }
}

Step 3. Adding the custom validation function

?
1
2
3
4
5
6
7
function example_commerce_billing_pane_validate(&$form, &$form_state, $checkout_pane, $order) {
  if ($form_state['values']['customer_profile_billing']['field_request_invoice']['und'][0]['value'] == 1 && empty($form_state['values']['customer_profile_billing']['field_cif_nif']['und'][0]['value'])) {
    form_set_error($checkout_pane['pane_id'] . '][field_cif_nif][und][0][value', t('DNI/CIF/NIF field is required.'));
    return FALSE;
  }
  return TRUE;
}

Now, the billing panel in the checkout form shows this

Commerce checkout validation

 

We hope this is of help. If you know another way to do this or you have another idea you can write a comment. Thanks!

Drupal commerce checkout流程学习笔记

Drupal commerce checkout的流程由多个page组成,每个page上面可以有多个pane。模块可以定义自己提供的pane,一个例子是commerce_customer.module...
  • atec2000
  • atec2000
  • 2016年05月29日 12:50
  • 394

Drupal Commerce

加到购物车: function commerce_cart_line_item_add($product_id, $quantity, $uid) {     $line_item...
  • renk123
  • renk123
  • 2014年04月25日 16:39
  • 414

安装commerce_kickstart全记录

1、从https://www.drupal.org/project/commerce_kickstart下载commerce_kickstart-7.x-2.19-core.tar.gz。 2、为了方...
  • atec2000
  • atec2000
  • 2014年10月30日 22:39
  • 1571

Drupal commerce 性能优化 (Drupal commerce performance optimize)

http://42.121.105.168/shop从开始的时候打开一个页面需要超过9秒的时间到现在可以在3秒内打开,给自己带来了很多欣慰。开始的时候是认为server性能不足,所以讲aliyun服务...
  • zhili_he_1985
  • zhili_he_1985
  • 2012年10月19日 15:15
  • 1477

2013年jQuery Validation Engine 表单验证

2013年jQuery Validation Engine 表单验证
  • andyliulin
  • andyliulin
  • 2013年11月09日 22:53
  • 18557

jQuery Validation Engine 表单验证 例子 说明 api

jQuery Validation Engine 表单验证来源 功能强大的 jQuery 表单验证插件,适用于日常的 E-mail、电话号码、网址等验证及 Ajax 验证,除自身拥有丰富的验...
  • yanghai0000
  • yanghai0000
  • 2015年06月16日 14:27
  • 502

Drupal 表单各构建元素属性列表

引用地址:http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7 Form Controls ...
  • for023
  • for023
  • 2012年09月07日 10:11
  • 447

在Drupal的form表单中使用js事件,比如onClick和onChange等,或者加载一些css样式等自己需要的杂七杂八的东西

我使用的是drupal 6 版本 由于Drupal使用自己的form表单机制来输出表单,如果想在表单中使用一些自己定义的css或者添加的js控件等可以这样做: drupal的form表单有一个属性叫做...
  • yyyfff43
  • yyyfff43
  • 2009年09月19日 11:34
  • 3545

Drupal 7 中 Restful 在C#中连接认证登录

首先设定我们的Drupal7 Restful服务正常开启,通过/api/login进行认证。还没有了解Restful的可以参考下我的关于Restful之一二三四五的连接。 下面主要根据http://w...
  • e_zhiwen
  • e_zhiwen
  • 2016年09月19日 20:32
  • 655

在html5 中怎么简单的编程,来校验(validate)form中的内容

在form中 用onsubmit调用javascript 方法来取代 传统的 button 的 onClick方法
  • remote_roamer
  • remote_roamer
  • 2016年05月13日 16:09
  • 773
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Drupal Commerce alter checkout form and custom validate
举报原因:
原因补充:

(最多只允许输入30个字)