0

我正在创建一个自定义用户设置页面。我有一个字段: zip_code 从自定义用户字段中获取初始值。我有一个自定义函数,它使用 zip_code 的值提取外部数据。

我目前将该字段的默认值设置为自定义用户字段(如果可用)。这是按设计工作的;但是,我想让用户能够通过 Ajax 回调更改他们的邮政编码。这将用新的单选按钮替换已经填充的单选按钮。我似乎无法解决这个问题。这是我的代码:

 function settings_shopping_form($form, &$form_state) {
  include_once "external.inc";
  // Get user fields
  global $user;
  $user_fields = user_load($user->uid);
  $zipcode = $user_fields->zip_code['und']['0']['value'];
  if(isset($zipcode)) {
   $form['zip_code'] = array(
   '#title' => t('Zip Code'),
   '#type' => 'textfield',
   '#required' => TRUE,
   '#default_value' => $zipcode,
   '#ajax' => array(
    'callback' => 'settings_form_callback',
    'wrapper' => 'textfields',
   ),
);
 $storename = getmystorename($zipcode);
 if(count($storename) > 0) {
  $form['textfields'] = array( 
   '#prefix' => '<div id="textfields">',
   '#suffix' => '</div>',
   '#type' => 'fieldset' );
  $form['textfields']['stores'] = array(
   '#type' => 'radios',
   '#title' => t('Choose your store:'),
   '#options' => $storename,
   '#default_value' => $storename[1], );
  } else {
    $form['textfields']['incorrect'] = array(
   '#title' => t('Sorry, there are no stores available near you. Check back later'),
   '#type' => 'fieldset', );
}
}

我的回调函数很简单:

 function settings_form_callback($form, $form_state) {
   return $form['textfields'];
 }

重申一下:我想添加在更改 zip_code 字段时用 getmystorename 函数生成的新按钮替换填充单选按钮的功能。

4

1 回答 1

0

我最终从示例模块中举了一个例子(喜欢它!):

$defaults = !empty($form_state['values']['zip_code']) ? $form_state['values']['zip_code'] : $zipcode;
$storename = getmystorename($defaults);

我将它放在表单开始之前,以便在表单构建器之前加载值。

于 2012-10-02T16:45:36.393 回答