it-swarm-ko.tech

추가 버튼을 추가하고 처리기를 노출 된 뷰 양식에 제출하려면 어떻게해야합니까?

노출 된 뷰 폼에 두 번째 버튼을 추가하고 싶습니다.

버튼을 표시 할 수는 있지만 버튼 제출 핸들러를 호출하지는 않습니다. 대신보기가 자동으로 제공하는 표준 검색 버튼처럼 작동합니다.

두 번째 버튼으로 별도의 핸들러를 호출하려면 어떻게해야합니까?

아래는 내가 시도한 것입니다.

(FWIW, 내 구체적인 목표는 사용자가 노출 된보기 양식을 사용하여 기존 노드를 검색 한 다음 찾지 못하면 새 노드를 게시하는 것입니다. 그래서 전화 할 버튼을 원합니다. 새 노드를 게시하는 작업)


function my_module_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'views_exposed_form':
      if ($form['#id'] = 'views-exposed-form-my-module-page-1') {
        // Add a button
        $form['my_button']['#type'] = 'button';
        $form['my_button']['#value'] = t('My Extra Button');
        $form['my_button']['#submit'] = array('my_module_button_handler');
      }
      break;
  }
}

function my_module_button_handler($form, &$form_state) {
  // do something here
}
4
chipcleary

좋아, 나는 그것을 작동시켰다.

몇 가지 작업을 수행해야했습니다.

1) 양식에서 AJAX을 끕니다. [ '#value']는 항상 기본 버튼이었습니다).

2) my_module_button_handler에서 $ from_state [ 'redirect']뿐만 아니라 $ form_state [ 'no_redirect'] = FALSE도 설정하십시오.

AJAX on으로 작동시키는 방법을 알고 싶다면 팁을 주시면 감사하겠습니다.

2
chipcleary

제출 핸들러는 기본적으로 양식 api 요소 유형 "button"에서 호출되지 않습니다. 버튼에서 제출 핸들러를 실행하려면 추가해야합니다.

$form['my_button']['#executes_submit_callback'] = TRUE;

부수적으로 이것은 executes_submit_callback이 기본적으로 해당 요소 유형에서 true와 같기 때문에 #type이 'submit'인 경우에는 해당되지 않습니다.

도움이 되었기를 바랍니다.

2
ericduran