Wie finde ich die Formular-ID eines Formulars?

22

Wie erhalte ich die Formular-ID meines Formulars? Ich habe gerade angefangen, meine Module zu machen und bin im Stillstand. Ich habe diesen Code von jemand anderem erhalten und versuche ihn anzupassen:

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'the form id for the node form') {
    $form['#submit'][] = 'my_custom_submit_handler';
  }
}
verzaubern
quelle
2
Mögliches Duplikat: drupal.stackexchange.com/questions/5605/…
Laxman13
Bitte beachten Sie die Antworten auf die Frage oben, es sollte auch Ihre Frage beantworten
Laxman13
1
Die Frage ist hier ganz anders; Es wird nicht gefragt, wie ein Formularelement identifiziert werden soll, sondern welche Formular-ID bei der Implementierung von überprüft werden soll hook_form_alter(). Angesichts des angegebenen Codes würde ich sagen, dass diese Frage anders ist.
kiamlaluno

Antworten:

17

Versuchen Sie, die Formularvariablen mit der PHP-Funktion print_r zu drucken .

function hook_form_alter(&$form, &$form_state, $form_id) {
  print_r($form);
}

Wenn Sie die Seite besuchen, auf der sich das Formular befindet, werden die Variablen (und der Name) angezeigt.

Eine einfachere Möglichkeit, auf die Informationen zuzugreifen (oder sie anzuzeigen), wäre die Verwendung der vom Modul Devel bereitgestellten Funktion dpm () . Sie können es genauso verwenden wie print_r.

Bart
quelle
1
In Anbetracht des gemeldeten Codes muss der Inhalt der $formVariablen nicht angezeigt werden.
kiamlaluno
10
$ Form_id ist auch ein Parameter, den Sie direkt ausdrucken können !!
Niksmac
1
Wenn Sie Devel aktiviert haben, nurdpm($form_id);
Kein Sssweat
35

Ermitteln der FORM ID ohne Installation des Moduls

Das Auffinden der Formular-ID ist sehr einfach, ohne dass Module und alles installiert werden müssen

SCHRITT 1: Öffnen Sie die Bearbeitungsseite von (ODER überprüfen Sie Ihr Formular).

SCHRITT 2: Wenn es sich um eine Knotenform handelt, suchen Sie nach " Knotenform " im inspect-Element

Finden der Formular-IDÜberprüfen Sie, ob Sie sich im Formularelement befinden .

SCHRITT 3: Siehe angefügtes Bild. Der hervorgehobene grüne Text ist die ID des Formulars

SCHRITT 4: WICHTIG Wenn Sie es schließlich verwenden möchten, hook_form_alter()ersetzen Sie den Bindestrich durch einen Unterstrich

Beispielsweise: yourform_id_with_content_type_name_form

Ebenso können Sie IDs aller Formulare in Drupal finden. Alles, was Sie tun müssen, ist, das Formularelement zu suchen, nach dem ID-Attribut zu suchen und es zu verwenden

Ich hoffe es hilft :)

DEVARAJ JOHNSON
quelle
1
Dies hat bei mir nicht funktioniert, als ich das Kommentarformular auf einer Drupal 8-Site schützen wollte. Ich habe in diesem Kommentar auf drupal.org eine Lösung gefunden , in der es heißt: 1) Finde ein verstecktes Eingabeelement, dessen nameAttribut den Wert "form_id" hat. 2) Sehen Sie sich das valueAttribut des Eingabeelements an - der Wert des Attributs ist die gewünschte Formular-ID. Beispiel: Das Kommentarformular auf Story-Knoten hat die Formular-ID "comment_comment_node_story_form". Wenn Sie möchten, können Sie diese neuen Informationen in Ihre Antwort aufnehmen.
Herzbube
10

Wenn sich Ihr Webformular unter "www.mydomain.com/node/351" befindet, lautet Ihre Formular-ID "webform_client_form_351". Also, was auch immer Ihre NID ist - das ist Ihre Formular-ID.

JasmineM
quelle
2
Die Frage bezieht sich nicht auf das Webform-Modul. Es geht um das Knotenbearbeitungsformular.
kiamlaluno
Die Frage bezieht sich auf das Knotenbearbeitungsformular. Wenn Sie jedoch eine Webformular-ID suchen möchten, funktioniert dies ordnungsgemäß.
Herci
Diese Antwort ist richtig, habe sie nur getestet.
vicenteherrera
6

Wenn Sie wissen, wo sich der Code befindet, der das zu ändernde Formular definiert, suchen Sie dort. Die Formular-ID ist nur der Name der Funktion, die dieses Formular definiert.

Beispielsweise definiert Views die Funktion views_ui_edit_view_form in Zeile 875 von views / includes / admin.inc. Der Filter Hierarchical Select views sucht in Zeile 50 von hierarchical_select / modules / hs_taxonomy_views.module in einer hood_form_alter-Funktion nach dieser Formular-ID.

David L
quelle
4

Verwenden Sie die drupal_set_message()Funktion, um die Formular-ID anzuzeigen.

function hook_form_alter(&$form, $form_state, $form_id) {
drupal_set_message($form_id);
// other codes
}
Utsav Sinha
quelle
4

Verwenden Sie das Modul " Formular-ID abrufen", um auf einfache Weise die Formular-ID eines beliebigen Formulars in Drupal zu ermitteln.

Hier ist ein Zitat darüber von seiner Projektseite:

Wenn Sie mit der Maus über ein Formular fahren, wird ein Kontextlink angezeigt. Wenn Sie den Link erweitern, wird die Formular-ID angezeigt. Klicken Sie auf den Link und Sie sehen ein modales Fenster mit einer kopierbaren Formular-ID und einem Hook-Vorschlag für hook_form_ID_alter ().

Dieses Modul ist veraltet. Es wurde verbessert, erweitert und als Devel-Form-Debug umbenannt . benutze es stattdessen.

Offenlegung: Ich betreue diese Module.

Tim
quelle
3

Da der von Ihnen gemeldete Code nach der Formular-ID des Knotenformulars sucht, gibt es zwei Fälle.

Drupal 6

Wenn der Code versucht, das zum Festlegen der Einstellungen für einen Inhaltstyp verwendete Formular zu ändern, sollte die folgende IF-Anweisung verwendet werden.

if ($form_id == 'node_type_form' && isset($form['identity']['type'])) { /* … */ }

Wenn der Code versucht, das Knotenbearbeitungsformular zu ändern, sollte der Code die folgende IF-Anweisung verwenden.

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }

Drupal 7 und höher

Im ersten Fall sollte die IF-Anweisung die folgende sein:

if ($form_id == 'node_type_form') { /* … */ }

Wenn Sie einen anderen Ansatz verwenden und annehmen, dass mymodule der Kurzname Ihres Moduls ist, könnten Sie ihn verwenden mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Seit Drupal 7 werden alle Hooks, die zum Ändern der von einem anderen Modul implementierten Form verwendet wurden, $form_idals letzter Parameter abgerufen. Siehe hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

Im zweiten Fall ist die IF-Anweisung dieselbe, die für Drupal 6 verwendet wird.

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }
kiamlaluno
quelle
1

Installieren Sie zuerst das Devel-Modul . Erstellen Sie dann ein Modul wie den folgenden Code

function hook_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
}

Dann können Sie ALLE Details eines Formulars sehen, wie Formular-ID, Feldnamen eines Formulars usw.

Sokratis
quelle