¿Cómo puedo encontrar la identificación del formulario?

22

¿Cómo obtengo el id del formulario? Acabo de comenzar a hacer mis módulos y estoy parado. Recibí este código de otra persona y estoy tratando de personalizarlo:

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';
  }
}
encantar
fuente
2
Posible duplicado: drupal.stackexchange.com/questions/5605/…
Laxman13
por favor vea las respuestas a la pregunta anterior, también debería responder a su pregunta
Laxman13
1
La pregunta aquí es bastante diferente; no se pregunta cómo identificar un elemento del formulario, sino cuál es el ID del formulario que se debe verificar en la implementación de hook_form_alter(). Dado también el código informado, diría que esta pregunta es diferente.
kiamlaluno

Respuestas:

17

Intente imprimir las variables de formulario con la función PHP print_r .

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

Cuando visite la página en la que se encuentra el formulario, se mostrarán las variables (y el nombre).

Una forma más fácil de acceder (o más bien ver) la información sería usar la función dpm () proporcionada por el módulo Devel . Puede usarlo de la misma manera que usaría print_r.

Bart
fuente
1
Dado el código informado, no hay necesidad de ver el contenido de la $formvariable.
kiamlaluno
10
¡También $ form_id es un parámetro que puedes imprimir directamente!
niksmac
1
Si tiene habilitado Devel , simplementedpm($form_id);
No Sssweat
35

Encontrar ID de formulario sin instalar el módulo

Encontrar la identificación del formulario es muy fácil, no es necesario instalar módulos y todo

PASO 1: Ábralo desde ir a su página de edición (O inspeccione su formulario).

PASO 2: si es una forma de nodo, busque "forma de nodo " en el elemento de inspección

Encontrar la identificación del formularioComprueba que estás en el elemento de formulario .

PASO 3: vea la imagen adjunta, el texto verde resaltado es la ID del formulario

PASO 4: IMPORTANTE Finalmente, si desea usarlo, hook_form_alter()reemplace el hypen con guión bajo

Por ejemplo: yourform_id_with_content_type_name_form

Como sabio, puede encontrar la identificación de cualquier forma en drupal, todo lo que tiene que hacer es inspeccionar-> encontrar el elemento de la forma y buscar el atributo ID y usarlo

Espero eso ayude :)

DEVARAJ JOHNSON
fuente
1
Esto no funcionó para mí cuando quería proteger el formulario de comentarios en un sitio de Drupal 8. Encontré una solución en este comentario en drupal.org , donde dice: 1) Encuentre un elemento de entrada oculto cuyo nameatributo tenga el valor "form_id". 2) Observe el valueatributo del elemento de entrada : el valor del atributo es el ID de formulario deseado. Ejemplo: El formulario de comentarios en los nodos de la historia tiene el ID de formulario "comment_comment_node_story_form". Si lo desea, puede incorporar esta nueva información en su respuesta.
herzbube
10

Si su formulario web se encuentra en "www.midominio.com/nodo/351", su ID de formulario será "webform_client_form_351". Entonces, sea cual sea su nid, esa es su identificación de formulario.

Jazmín
fuente
2
La pregunta no es sobre el módulo de formulario web. Se trata del formulario de edición de nodos.
kiamlaluno
La pregunta es sobre el formulario de edición de nodos, pero si desea encontrar cualquier ID de formulario de formulario web, esto funciona correctamente.
herci
Esta respuesta es correcta, solo la probé.
vicenteherrera
6

Si sabe dónde está el código que define la forma que desea modificar, mire allí. La identificación del formulario es solo el nombre de la función que define ese formulario.

Por ejemplo, Vistas define la función views_ui_edit_view_form en la línea 875 de views / includes / admin.inc. El filtro de vistas de selección jerárquica busca esa identificación de formulario en la línea 50 de jerarquía-selecta / módulos / hs_taxonomy_views.module en una función hood_form_alter.

David L
fuente
4

Use la drupal_set_message()función para mostrar la identificación del formulario.

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

Use el ID del formulario de obtención módulo para encontrar fácilmente la identificación de cualquier formulario en Drupal.

Aquí hay una cita al respecto de su página de proyecto:

Al pasar el cursor sobre cualquier formulario, verá un enlace contextual disponible. Al expandir el enlace, verá el ID del formulario. Haga clic en el enlace y verá una ventana modal con ID de formulario copiable y sugerencia de enlace hook_form_FORM_ID_alter ().

Este módulo está en desuso. Fue mejorado, ampliado y renombrado como Devel form debug ; úsalo en su lugar.

Divulgación: soy el mantenedor de estos módulos.

Tim
fuente
3

Como el código que informó está buscando el ID de formulario del formulario de nodo, hay dos casos.

Drupal 6

Si el código intenta alterar el formulario utilizado para establecer la configuración de un tipo de contenido, entonces debe usar la siguiente instrucción IF.

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

Si el código está tratando de alterar el formulario de edición de nodos, entonces el código debe usar la siguiente instrucción IF.

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

Drupal 7 y superior

En el primer caso, la declaración IF debería ser la siguiente:

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

Usando un enfoque diferente, suponiendo que mymodule es el nombre corto de su módulo, podría usarlo mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Desde Drupal 7, todos los ganchos utilizados para alterar la forma implementada por otro módulo se obtienen $form_idcomo último parámetro. Ver hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

En el segundo caso, la declaración IF es la misma que se usa para Drupal 6.

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

Primero instale el módulo Devel. Luego cree un módulo como el código a continuación

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

Luego puede ver TODOS los detalles de un formulario, como ID de formulario, nombres de campo de un formulario, etc.

sokratis
fuente