繁体   English   中英

Drupal,Ubercart-将自定义字段添加到结帐表单

[英]Drupal, Ubercart - Add custom field to checkout form

需要Drupal专家的帮助。

我的目的(手里拿着Drupal 7和Ubercart 3)是向Checkout页面添加一个自定义字段,该字段应该是动态的(来自ajax请求的值),其内容取决于用户的交付城市输入。

通过“额外字段窗格”模块,我成功创建了具有一些占位符值的字段。 然后,我使用JS方法将值附加到该字段。 当我提交带有该动态添加的选定值的表单时,出现了问题-该字段存在“无效选择”错误。 选择非js附加值(占位符)后,一切都会按预期进行。

您能提示我解决该问题的方法吗?

我在这里https://stackoverflow.com/a/5159013/837255找到了一个,这似乎是一种常见的方法,但是这里开始出现其他问题。 在钩子中的%my module%中,我无法访问字段对其进行操作。

我需要如何在模块“ ajax_field_name”创建的示例中进行更改:

$form['panes']['delivery']['ajax_field_name']['#ajax'] = ....

但是我的* cking窗格没有任何$ form ['panes'] ['delivery'] ['ajax_field_name']。 当我做var_dump($form['panes']['delivery']) panes var_dump($form['panes']['delivery'])我看到'ajax_field_name'位于$form['panes']['delivery']['address']['#uc_addresses_address'] panes $form['panes']['delivery']['address']['#uc_addresses_address']私有财产背后的对象。

function uc_nova_poshta_form_alter(&$form, &$form_state, $form_id){
    if ($form_id == 'uc_cart_checkout_form'){
        $obj = $form['panes']['delivery']['address']['#uc_addresses_address'];
        // addressBook is a private property
        $obj->addressBook;
    }
}

实际上,这段代码满足了我的需要-

$form['panes']['delivery']['address']['ajax_field_name2'] = array(
  '#type' => 'select',
  ...
}

在正确的位置创建一个具有访问权限的自定义字段,但仅以该形式存在,并且该字段不会影响任何其他活动(订单查看,管理页面等)。 同样在$form['panes']['delivery'] panes $form['panes']['delivery']该字段('ajax_field_name2')与使用模块'ajax_field_name'创建的位置分开。

我猜想这种行为的原因是某些模块,例如uc_addresses(对吗?),但是即使禁用了最可疑的模块,问题仍然存在。

是否有可能找出如何访问“ ajax_field_name”创建的字段? 谢谢。

这可能不能完全解决您的问题(如果您仍然有问题,因为这似乎是一个比较老的问题...),但是一个问题是您使用了错误的钩子。 您应该使用hook_uc_checkout_pane_alter和目标uc_checkout_pane_delivery来完成此任务。 我很难尝试将默认国家/地区设置为美国以外的其他国家/地区; 如果通过hook_form_alter及其变体来操作它们,则事情将严重中断。

我现在正在尝试类似的工作。 当我发现它时,我将使用更多信息来更新此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM