Drupal,Ubercart - 在结帐表单中添加自定义字段

时间:2013-03-04 21:24:27

标签: php drupal ubercart

需要Drupal专家的帮助。

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

使用“Extra Fields Pane”模块,我已成功创建了具有一些占位符值的字段。然后,我使用JS方法将值附加到该字段。当我使用动态添加的选定值提交表单时出现问题 - 我对该字段有“无效选择”错误。当选择非js值(占位符)时 - 一切都按预期工作。

你能否提示我解决这个问题?

我在这里https://stackoverflow.com/a/5159013/837255发现了一个,这似乎是一种常见的方法,但这里还有其他问题。 在我的模块%%中,我无法访问字段来对其进行操作。

我需要如何更改模块'ajax_field_name'创建的示例:

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

但我的* cking窗格没有任何$ form ['panes'] ['delivery'] ['ajax_field_name']。当我var_dump($form['panes']['delivery'])时,我看到'ajax_field_name'位于私人财产后面$form['panes']['delivery']['address']['#uc_addresses_address'] OBJECT的某处。

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']中,此字段('ajax_field_name2')与使用模块'ajax_field_name'创建的字段分开。

我猜这种行为的原因是一些模块,例如uc_addresses(我是对的吗?),但即使我禁用了大部分可疑的东西 - 问题仍然存在。

是否有可能找到如何访问'ajax_field_name'创建的字段? 谢谢。

1 个答案:

答案 0 :(得分:1)

这可能无法完全解决您的问题(如果您仍然拥有它,因为这似乎是一个相当古老的问题......),但有一个问题是您使用的是错误的钩子。您应该使用hook_uc_checkout_pane_alter并定位uc_checkout_pane_delivery来完成此操作。我学会了这种方法,试图将选择的默认国家设置为美国以外的其他国家;如果你通过hook_form_alter和它的变种操纵它们,事情将会严重破坏。

我现在正在做类似的事情。当我发现它时,我将用更多信息更新这个答案。