2012-07-26 1 views
1

최근 양식을 변경하여 Ajax를 사용하여 데이터를 제출했습니다. 내 양식은 (mm-dd-yyyy) 형식으로 사용자의 날짜를 수락하고이 변경 전에 DB에 보내기 전에 아래 보이는 hook_submit을 yyyy-mm-dd 형식으로 변환합니다. . 변경 후에는 해당 단계를 건너 뛰고 날짜 값을있는 그대로 DB로 보냅니다.

변환을 수행 할 자체 함수를 찾거나 쓰지 않아도 되겠지만 먼저이 특성을 이해하고 싶습니다. 나중에 나에게 도움이 될만한 것을 배울 것입니다.

도움을 주시면 감사하겠습니다.

제 질문은 왜 내 날짜 값이 $ form_stata가 아닌 $ form_data로 변환 되었습니까?

모듈 드루팔 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

답변

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

관련 문제