Antworten:
Sie müssen die triggering_elementvon der verwenden $form_state['triggering_element'].
Es wird empfohlen, ein #nameAttribut für Ihre Schaltfläche zu definieren , damit Sie diesen Wert in der Liste haben triggering_element.
Beispielsweise:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
Wenn Sie dieses Attribut nicht definieren, triggering_elementwerden die Schaltflächen #value(der Text, den der Benutzer lesen kann) beibehalten. Dies wird jedoch nicht empfohlen, da andere Module diesen Wert möglicherweise ändern oder von der Lokalisierung geändert werden.
Sie können auch verwenden $form_state['clicked_button'], dies ist jedoch veraltet .
Weitere Informationen finden Sie auf der Dokumentationsseite für die Funktion drupal_build_form .
$form_state['clicked_button']['#value'] Hier erfahren Sie, welche Schaltfläche im Formular angeklickt wurde.
$form_state['clicked_button']['#value']:)
Vergleichen Sie diese Werte mit $form_statedenen, die ich in Drupal 6 gemacht habe und die in Drupal7 gleich wären
if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
//Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
//Process if Cancel is pressed
}
Benennen Sie die Schaltflächen mit dem #nameAttribut wie folgt:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
und dann benutze:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
Für diejenigen, die immer noch herausfinden möchten, wie sie auf das ausgelöste Ereignis zugreifen können, ist hier die Drupal 8-Lösung.
$form_state->getTriggeringElement()
Dies gibt das Array des auslösenden Submit-Elements zurück. Wenn Sie ein aufgerufenes Markup hinzufügen, können #nameSie folgendermaßen darauf zugreifen.
$button_clicked = $form_state->getTriggeringElement()['#name']
Der Grund für diese Änderung ist, dass FormStateInterfacees sich nun um eine readOnlyDatei handelt, in der nur Klassen, die sich erweitern, FormStateInterfaceauf die Variablen zugreifen können. Sie müssen also getTriggeringElement()Zugriffsmethoden wie verwenden, um auf die Variable zuzugreifen.
In Drupal 8.4.4 $form_state->getTriggeringElement()['#name'];gibt Ihnen der Wert von op. Wenn Sie im #valueWertearray des Formularstatus nach diesem Schlüssel suchen, erhalten Sie den Schlüssel des Formularelements button - mit anderen Worten, die Zeichenfolge, die der Endbenutzer auf der Schaltfläche auf der Seite sieht.
Ich weiß nicht, ob $form_state->getValues()['op']es für alle Formen universell ist, aber ich codiere es fest in der Form meines Moduls.
Drupal 8.6.7
Erstellen Sie eine Schaltfläche wie unten.
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
In Ihrer Submit-Funktion erhalten Sie den Namen der Schaltfläche wie unten angegeben.
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
Vergleiche können gerne gemacht werden
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()einem Formularübermittlungs-Handler? Ein Formularübergabehandler ist nicht die Implementierung vonhook_submit().