Drupal,Ubercart - 添加自定义字段以结帐形式

问题描述:

需要Drupal专家的帮助。Drupal,Ubercart - 添加自定义字段以结帐形式

我的目的(手中有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'] = .... 

但我他妈的窗格中没有任何$形式[“窗格”] [“交货”] ['ajax_field_name “]。当我做var_dump($form['panes']['delivery'])时,我发现位于$form['panes']['delivery']['address']['#uc_addresses_address']对象后面的'ajax_field_name'位于私有财产后面。

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'创建的字段? 谢谢。

这可能不能完全解决您的问题(如果您仍然有这个问题,这似乎是一个相当古老的问题......),但一个问题是您使用的是错误的钩子。您应该使用hook_uc_checkout_pane_alter和目标uc_checkout_pane_delivery来完成此操作。我试图将选定的默认国家设置为除美国之外的其他国家,我学到了这一点。如果你通过hook_form_alter以及它的变体来操纵它们,事情会很糟糕。

我现在正在通过类似的工作。当我发现它时,我会用更多信息更新这个答案。