문제

내 양식에 두 개의 제출 버튼이 있습니다. 하나는`my_form_submit` like-ah-so를 호출하는 일반 제출 버튼입니다.

$form['fieldset']['submit'] = array(
  '#type' => 'submit',
  '#value' => 'Show Applications',
);

양식을 제출할 다른 버튼을 추가하고 싶지만 다른 제출 처리기에게 전화하십시오. 이것을 할 방법이 있습니까? 나는 추가를 보았다 #submit AH-SO와 같은 요소에 대한 속성 :

$form['fieldset']['evil_plan'] = array(
  '#type' => 'submit',
  '#value' => 'Big Red Button',
  '#submit' => array('steal_formula_for_icantbeliveitsnotbutter'),
);

`steal_formula_for_icantbeliveitsnotbutter` 기능을 호출하기를 바라고 있지만 작동하지 않습니다. 큰 빨간 버튼을 클릭하면 일반`my_form_submit` 기능이 호출되어 버터 대용품을 수백만으로 만들려고 계획을 세웁니다. 누가이 어두운 혼란에 약간의 빛을 흘릴 수 있습니까?

도움이 되었습니까?

해결책

Drupal 5의 경우 이것이 유일한 해결책입니다.

function my_form_submit($form_id, $form_values) {
  if ($form_values['op'] == 'Show Applications') {
    // handle 'Show Applications' submission
  }
  elseif ($form_values['op'] == 'Big Red Button') {
    // handle 'Big Red Button' submission
  }
}

동일합니다 my_form_validate.

Drupal 6에서는 새로 소개 된 것과 함께 더 쉽게 수행 할 수 있습니다. 양식 버튼에 대한 Custom #Submit 및 #Validate 핸들러.

다른 팁

편집하다: API 문서 양식을 자세히 확인하면 아래의 초기 답변이 Drupal 6에 유효하지만 Drupal 5에 대해서만 부분적으로 유효합니다. 비교 Drupal 5 문서 이랑 Drupal 6 문서 Drupal 5에서는 양식 자체에 콜백 함수 만 등록 할 수 있음을 보여줍니다. 버튼의 '#Submit'속성은 버튼을 제출 버튼으로 처리해야 함을 나타내는 부울 일뿐입니다. 그래서 추가 'Per Button'콜백은 Drupal 6 유일한 기능입니다!

주어진 질문에, 이것은 AX에서 제안한 IF/ELSE 옵션 만 있거나 양식에 대해 두 개의 제출 콜백을 등록하는 변형이 있음을 의미합니다. 각각의 오른쪽 버튼이 호출되는지 확인하지만 두 개의 별도를 사용합니다. 콜백).


(초기 답변)

여기에는 몇 가지 메커니즘이 있습니다.

  1. 콜백 제출 (및 유효성 검사) 콜백은 개별 버튼뿐만 아니라 양식 자체에 대해 등록 할 수 있습니다 ($form['#submit']). 양식에 등록 된 것은 모든 제출 버튼에 대해 호출되며, 해당 버튼에 대해서만 개별 버튼에 등록 된 버튼. (참고 : 중요한 Drupal 5/6 차이는 여기 편집을 참조하십시오.)
  2. 기본 양식 처리 (양식의 이름을 따서 명명 된 기능 제출 및 유효성 검증)는 Drupal이 양식에 콜백을 자동으로 추가합니다. '#submit' 그리고 '#validate' 배열.
  3. 등록은 배열을 사용하여 여러 제출/검증 기능을 다른 사람이라는 기능 (배열에 표시하는 것과 동일한 순서)을 사용할 수 있습니다.

따라서 귀하의 경우 AX가 제안한 IF/Expling 스위치를 수행하거나 양식에 대한 '글로벌'콜백을 해제하여 기본 제출 버튼으로 명시 적으로 이동해야합니다.

$form['fieldset']['submit']['#submit'] = $form['#submit'];
unset($form['#submit'];

(콜백 유효성 검증도 마찬가지)

그 후, 사악한 계획을 실행하는 큰 빨간 버튼에 대한 게시 된 예제는 예상대로 작동해야합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top