2012-07-26 13 views
1

我最近更改了表單以使用Ajax提交數據。我的表單以(mm-dd-yyyy)格式接受用戶的日期,並且在此更改之前,我的hook_submit如下所示,在將它發送到數據庫之前將它轉換爲(yyyy-mm-dd)格式。更改後,它跳過該步驟並按照原樣將日期值發送到數據庫。

我不介意找到或編寫自己的函數來完成轉換,但我首先想在做之前先理解這個性質。也許我會學到一些能夠幫助我的東西。

任何幫助,將不勝感激。

我的問題是,爲什麼我的日期值轉換爲$ form_data而不是$ form_state?

使用Drupal的7

模塊:日期API,CTools,

//Original submit handler 
//Format sent to DB: yyyy-mm-dd <--This is what I want for the Ajax version 
function fsa_roster_form_submit($form_id, &$form_data){ 
$dcc_table = 'dcc_'.$form_data['values']['sid']; 
$insertDaycare = db_insert($dcc_table) 
    ->fields(array(
     'entered' => $form_data['values']['date_entered'], 
     'exited' => $form_data['values']['date_exited'], 
    )) 
    ->execute(); 
} 

//Ajaxed submit handler: 
//Format sent to DB: mm-dd-yyyy 
function fsa_roster_form_ajax_submit($form, $form_state) { 
    $dcc_table = 'dcc_'.$form_state['input']['sid']; 
    $insertRoster = db_insert($dcc_table) 
    ->fields(array(
     'entered' => $form_state['input']['date_entered'], 
     'exited' => $form_state['input']['date_exited'], 
    )) 
    ->execute(); 
} 
$form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save Entry'), 
    '#prefix' => '<div id="modalSubmit">', 
    '#ajax' => array(//Remove this from your imagination for original submit handler 
     'callback' => 'fsa_daycare_roster_form_ajax_submit', 
     'wrapper' => 'msgBox', 
     'method' => 'replace', 
     'effect' => 'fade', 
    ), 
    '#suffix' => '</div><script>addValidationEvents();</script>' 
); 
+0

而不是編碼,你有沒有嘗試在drupal配置中更改「日期格式」?所以所有的日期都以這種格式輸出.. – Gntem 2012-07-26 05:49:37

回答

1

的原因是你在使用AJAX提交$form_state['input']回調,並在定期提交回調$form_state['values']。在處理和驗證之前,input數組始終包含表單數據,而values數組包含處理和驗證應用後的值。

因此,要達到同樣的效果在AJAX提交的回調,請使用下,就像你在定期提交回調做:

function fsa_roster_form_ajax_submit($form, $form_state) { 
    $dcc_table = 'dcc_'.$form_state['values']['sid']; 
    $insertRoster = db_insert($dcc_table) 
    ->fields(array(
    'entered' => $form_state['values']['date_entered'], 
    'exited' => $form_state['values']['date_exited'], 
)) 
    ->execute(); 
} 

而且,它的價值,你的定期提交的回調和AJAX提交回調都接受相同的參數:$form$form_state。儘管你在兩個函數中用不同的變量名稱來稱呼它們,但它們實際上(或多或少)是相同的。

+0

謝謝!你的回答非常有幫助,並且我更好地理解了$ form_state輸入和值。 – SFox 2012-08-14 01:19:21