2011-04-05 2 views
4

형태드루팔 AHAH 동적 형태 확장

$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 유효성 검사를 수행하고 있습니까? 내가 당신의 마지막 질문에 대한 생각

+0

나는이 기사가 너를 많이 도울 것이라고 생각하지 않는다. http://www.mindyourcode.com/php/adding-dynamic-form-elements-using-ahah-in-apply-for-for-role-module/ – Mashhadi

답변

0

는 사용 $form_state['ahah_submission'] = TRUE을 설정해야합니다.