Comment puis-je trouver l'ID de formulaire d'un formulaire?

22

Comment obtenir l'identifiant de formulaire de mon formulaire? Je viens de commencer à fabriquer mes modules et je suis au point mort. J'ai obtenu ce code de quelqu'un d'autre et j'essaie de le personnaliser:

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';
  }
}
améliorer
la source
2
Duplicata possible: drupal.stackexchange.com/questions/5605/…
Laxman13
s'il vous plaît voir les réponses à la question ci-dessus, il devrait également répondre à votre question
Laxman13
1
La question ici est tout à fait différente; il ne s'agit pas de savoir comment identifier un élément de formulaire, mais quel est l'ID de formulaire à vérifier dans l'implémentation de hook_form_alter(). Étant donné également le code signalé, je dirais que cette question est différente.
kiamlaluno

Réponses:

17

Essayez d'imprimer les variables du formulaire avec la fonction PHP print_r .

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

Lorsque vous visitez la page où se trouve le formulaire, les variables (et le nom) s'affichent.

Un moyen plus facile d'accéder (ou plutôt de visualiser) les informations serait d'utiliser la fonction dpm () fournie par le module Devel . Vous pouvez l'utiliser de la même manière que vous utiliseriez print_r.

Bart
la source
1
Étant donné le code signalé, il n'est pas nécessaire de voir le contenu de la $formvariable.
kiamlaluno
10
De plus, $ form_id est un paramètre que vous pouvez directement imprimer !!
niksmac
1
Si vous avez activé Devel , justedpm($form_id);
Pas de Sssweat
35

Recherche de FORM ID sans installer de module

Trouver l'ID de formulaire est très facile, pas besoin d'installer des modules et tout

ÉTAPE 1: Ouvrez-vous pour accéder à sa page d'édition (OU inspectez votre formulaire).

ÉTAPE 2: si c'est une forme de noeud trouver " node-form " dans l'élément inspect

Trouver l'identifiant du formulairevérifiez que vous êtes dans l' élément de formulaire .

ÉTAPE 3: voir l'image ci-jointe le texte vert en surbrillance est l'ID du formulaire

ÉTAPE 4: IMPORTANT Enfin si vous souhaitez l'utiliser pour hook_form_alter()remplacer l' hypen par un trait de soulignement

Par exemple: yourform_id_with_content_type_name_form

Comme sage, vous pouvez trouver l'id de n'importe quel formulaire dans drupal tout ce que vous avez à faire est d'inspecter-> trouver l'élément de formulaire et rechercher l'attribut ID et l'utiliser

J'espère que ça aide :)

DEVARAJ JOHNSON
la source
1
Cela n'a pas fonctionné pour moi lorsque je voulais protéger le formulaire de commentaire dans un site Drupal 8. J'ai trouvé une solution dans ce commentaire sur drupal.org , où il est dit: 1) Trouvez un élément d'entrée caché dont l' nameattribut a la valeur "form_id". 2) Regardez l' valueattribut de l'élément d'entrée - la valeur de l'attribut est l'ID de formulaire souhaité. Exemple: le formulaire de commentaire sur les nœuds d'histoire a l'ID de formulaire "comment_comment_node_story_form". Si vous le souhaitez, vous pouvez intégrer ces nouvelles informations dans votre réponse.
herzbube
10

Si votre formulaire Web se trouve sur "www.mydomain.com/node/351", votre ID de formulaire sera "webform_client_form_351". Donc, quel que soit votre nid - c'est votre ID de formulaire.

JasmineM
la source
2
La question ne concerne pas le module Webform. Il s'agit du formulaire de modification du nœud.
kiamlaluno
La question concerne le formulaire de modification de nœud, mais si vous souhaitez trouver un ID de formulaire Web, cela fonctionne correctement.
herci
Cette réponse est juste, viens de la tester.
vicenteherrera
6

Si vous savez où se trouve le code qui définit le formulaire que vous souhaitez modifier, regardez-le. L'identifiant de formulaire n'est que le nom de la fonction définissant ce formulaire.

Par exemple, Views définit la fonction views_ui_edit_view_form à la ligne 875 de views / includes / admin.inc. Le filtre des vues de sélection hiérarchique recherche cet identifiant de formulaire sur la ligne 50 de hierarchical_select / modules / hs_taxonomy_views.module dans une fonction hood_form_alter.

David L
la source
4

Utilisez la drupal_set_message()fonction pour afficher l'ID du formulaire.

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

Utilisez le module Get Form ID pour trouver facilement l'ID de formulaire de n'importe quel formulaire dans Drupal.

Voici une citation à ce sujet à partir de sa page de projet:

En survolant n'importe quel formulaire, vous verrez un lien contextuel disponible. En développant le lien, vous verrez l'ID du formulaire. Cliquez sur le lien et vous verrez une fenêtre modale avec un identifiant de formulaire copiable et une suggestion de crochet hook_form_FORM_ID_alter ().

Ce module est obsolète. Il a été amélioré, étendu et renommé en tant que débogage de formulaire Devel ; utilisez-le à la place.

Divulgation: Je suis responsable de ces modules.

Tim
la source
3

Comme le code que vous avez signalé recherche l'ID de formulaire du formulaire de nœud, il y a deux cas.

Drupal 6

Si le code essaie de modifier le formulaire utilisé pour définir les paramètres d'un type de contenu, il doit utiliser l'instruction IF suivante.

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

Si le code essaie de modifier le formulaire de modification du nœud, le code doit utiliser l'instruction IF suivante.

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

Drupal 7 et supérieur

Dans le premier cas, l'instruction IF doit être la suivante:

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

En utilisant une approche différente, en supposant que mymodule est le nom court de votre module, vous pouvez utiliser mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Depuis Drupal 7, tous les hooks utilisés pour modifier la forme implémentée par un autre module sont $form_idcomme dernier paramètre. Voir hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

Dans le second cas, l'instruction IF est la même que celle utilisée pour Drupal 6.

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

Installez d'abord le module Devel, puis créez un module comme le code ci-dessous

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

Ensuite, vous pouvez voir TOUS les détails d'un formulaire, comme l'ID du formulaire, les noms de champs d'un formulaire, etc.

sokratis
la source