4
$form['animal'] = array(
'#type' => 'select',
'#title' => t('Animal'),
'#options' => load_animals(),
'#ahah' => array(
'event' => 'change',
'path' => 'path/to/ajax/service',
'method' => 'replace',
'effect' => 'fade',
'wrapper' => 'breed-wrapper',
),
);
...
$form['breed'] = array(
'#type' => 'select',
'#title' => t('Breeds'),
'#options' => array('Select animal to load breed'),
'#prefix' => '<div id="breed-wrapper">',
'#suffix' => '</div>',
);
그리고 다음
$post = $_POST;
$form_state = array('storage' => NULL, 'submitted' => FALSE);
$form_build_id = $post['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
$args = $form['#parameters'];
$form_id = array_shift($args);
$form['#redirect'] = FALSE;
$form['#post'] = $post;
$form['#programmed'] = FALSE;
$form_state['post'] = $post;
drupal_process_form($form_id, $form, $form_state);
// New form elements
$breed_form = $form['breed'];
$options = load_breeds((int)$post['animal']);
$breed_form['#options'] = $options;
$form['breed'] = $breed_form;
form_set_cache($form_build_id, $form, $form_state);
$form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
unset($breed_form['#prefix'], $breed_form['#suffix']);
// Render the new output.
$output .= drupal_render($breed_form);
drupal_json(array('status' => TRUE, 'data' => $output));
기본 폼 핸들러 제출 AHAH 콜백 처리이다
function default_form_submit(&$form, $form_state){
$clicked_button = $form_state['clicked_button']['#value'];
$values = $form_state['values'];
if($clicked_button == $values['submit']){
unset($values['op'], $values['submit'], $values['form_build_id'],
$values['form_token'], $values['form_id']);
....
drupal_goto($_REQUEST['q'], $query);
}
}
드디어 제출 정상적인 게시 방식으로 양식을 작성합니다. n 오류가
An illegal choice has been detected.
으로보고됩니다. 제대로 form_set_cache()를 사용하고 있습니까?AHAH 게시시 기본 양식 제출 처리기도 호출됩니다. 이 핸들러에는 리다이렉션 로직이 포함되어 있으므로 AHAH 요청이 무효화됩니다. 그것을 무시하는 방법 - click_button 유효성 검사를 수행하고 있습니까? 내가 당신의 마지막 질문에 대한 생각
나는이 기사가 너를 많이 도울 것이라고 생각하지 않는다. http://www.mindyourcode.com/php/adding-dynamic-form-elements-using-ahah-in-apply-for-for-role-module/ – Mashhadi