0

カスタム ユーザー設定ページを作成しています。カスタム ユーザー フィールドから初期値を取得する zip_code という 1 つのフィールドがあります。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

私はexamplesモジュールから例をとることになりました(それが大好きです!):

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

フォームの開始前にこれを配置して、フォームビルダーの前に値が読み込まれるようにします。

于 2012-10-02T16:45:36.393 に答える