Dies kann ein Duplikat der folgenden sein: Mehrere Formulare senden , aber ich kann nicht herausfinden, wie die Antwort auf meine Situation zutrifft. Hier ist meine Aufgabe, diese (ich gebe zu) ziemlich ähnliche Frage zu stellen:
Ich habe eine Tabelle mit einer Datenzeile, jede Zeile hat eine Senden-Schaltfläche. Es könnte ungefähr so aussehen:
$form['f'] = array();
foreach ($rows as $row) {
$form['f'][$row['nid']] = array();
$form['f'][$row['nid']]['nid'] = array(
'#markup' => $row['nid'],
);
$form['f'][$row['nid']]['submit'] = array(
'#type' => 'submit',
'#value' => t('sumbit'),
'#submit' => array('f_submit'),
);
}
Das heißt, das Formular besteht aus einer Folge von Zeilen, die aus der Datenbank extrahiert wurden. Ich möchte einen Submit-Rückruf erstellen, der den Wert des entsprechenden nid
Felds aufnimmt und dessen Wert ausgibt. Ich denke, ich frage, was ich setzen soll, wo der Kommentar unten ist.
function f_submit($form, &$form_state) {
// Here I want to print the value of the relevant nid field
}
Antworten:
Daten über die angeklickte Schaltfläche werden in gespeichert
$form_state['triggering_element']
. Sie können die Knoten-ID erhalten, indem Sie auf schauen$form_state['triggering_element']['#parents']
. In Ihrem Fall wäre die Knoten-ID das zweite Element im übergeordneten Array. Bitte beachten Sie, dass das Namensattribut der Felddefinition definiert und eindeutig sein muss. Andernfalls zeigt das auslösende Element auf die letzte Schaltfläche zum Senden im Formular. Ich würde Ihren Code wie folgt ändern:Eine gute Möglichkeit zum Anzeigen
$form_state
besteht darin, das Devel-Modul (fürkrumo()
) zu installieren und dannkrumo($form_state);drupal_exit();
oben auf den Submit- Handler zu setzen. Dadurch wird ein schön strukturierter Datenbaum ausgedruckt.quelle
$form_state['clicked_button']
enthält jedoch immer die letzte NID als zweites übergeordnetes Element, nicht diejenige, die sich auf die angeklickte Schaltfläche bezieht (ich habe es gerade versucht). Dasselbe gilt für$form_state['triggering_element']
, was meiner Meinung nach in Drupal 7 bevorzugt wird (aber ich kann derzeit keinen Hinweis darauf finden)Setzen Sie die
#name
Eigenschaft jedes Submit-Elements auf einen eindeutigen Wert wie Ihren$row['nid']
. Auf diesen eindeutigen Wert kann über die Übermittlungsfunktion über zugegriffen werden$form_state['clicked_button']['#name']
.quelle
Ich hatte eine Weile damit zu kämpfen und fand diese Problemumgehung. Ich wollte zwei separate Senden-Schaltflächen mit leicht unterschiedlichem Verhalten haben. Ich wollte sie auch mit jQuery hinzufügen und entfernen.
Also habe ich das gemacht.
Erstellen Sie zwei Schaltflächen mit eindeutigen Namen.
Blenden Sie die Schaltfläche aus, die ich dynamisch verwenden möchte.
Klonen Sie diese Schaltfläche nach Bedarf an andere Stellen im Formular und auf der Seite.
Es scheint, dass wenn Sie die Schaltflächendefinition nicht über die Drupal-Formulardeklaration hinzufügen, diese nicht in $ form ['triggering_element'] vorliegt.
quelle