Drupal 5 양식에 두 개의 제출 버튼을 추가하려면 어떻게합니까?
-
05-07-2019 - |
문제
내 양식에 두 개의 제출 버튼이 있습니다. 하나는`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 옵션 만 있거나 양식에 대해 두 개의 제출 콜백을 등록하는 변형이 있음을 의미합니다. 각각의 오른쪽 버튼이 호출되는지 확인하지만 두 개의 별도를 사용합니다. 콜백).
(초기 답변)
여기에는 몇 가지 메커니즘이 있습니다.
- 콜백 제출 (및 유효성 검사) 콜백은 개별 버튼뿐만 아니라 양식 자체에 대해 등록 할 수 있습니다 (
$form['#submit']
). 양식에 등록 된 것은 모든 제출 버튼에 대해 호출되며, 해당 버튼에 대해서만 개별 버튼에 등록 된 버튼. (참고 : 중요한 Drupal 5/6 차이는 여기 편집을 참조하십시오.) - 기본 양식 처리 (양식의 이름을 따서 명명 된 기능 제출 및 유효성 검증)는 Drupal이 양식에 콜백을 자동으로 추가합니다.
'#submit'
그리고'#validate'
배열. - 등록은 배열을 사용하여 여러 제출/검증 기능을 다른 사람이라는 기능 (배열에 표시하는 것과 동일한 순서)을 사용할 수 있습니다.
따라서 귀하의 경우 AX가 제안한 IF/Expling 스위치를 수행하거나 양식에 대한 '글로벌'콜백을 해제하여 기본 제출 버튼으로 명시 적으로 이동해야합니다.
$form['fieldset']['submit']['#submit'] = $form['#submit'];
unset($form['#submit'];
(콜백 유효성 검증도 마찬가지)
그 후, 사악한 계획을 실행하는 큰 빨간 버튼에 대한 게시 된 예제는 예상대로 작동해야합니다.)