2012-10-02 73 views
0

我正在創建自定義用戶設置頁面。我有一個字段:從自定義用戶字段獲得它的初始值的zip_code。我有一個自定義函數,它使用zip_code的值來提取外部數據。Drupal AJAX替換

我目前有設置爲自定義用戶字段(如果可用)的字段的默認值。這是按設計工作的;但是,我想讓用戶能夠通過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']; 
} 

要重申:我想補充,以取代由getmystorename函數生成新的按鈕的填充單選按鈕的能力時, zip_code字段已更改。

回答

0

我最終採取從實例模塊(愛它!)的一個例子:

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

我自己的狀態開始之前把這個讓表單生成器前值負載。