Como posso encontrar o ID do formulário?

22

Como obtenho o ID do formulário? Eu apenas comecei a fazer meus módulos e estou parado. Eu recebi esse código de outra pessoa e estou tentando personalizá-lo:

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
fonte
2
Possível duplicata: drupal.stackexchange.com/questions/5605/…
Laxman13
por favor, veja as respostas para a pergunta acima, ela também deve responder à sua pergunta
Laxman13
1
A questão aqui é bem diferente; não está perguntando como identificar um elemento do formulário, mas qual é o ID do formulário que deve ser verificado na implementação de hook_form_alter(). Dado também o código relatado, eu diria que esta pergunta é diferente.
kiamlaluno

Respostas:

17

Tente imprimir as variáveis ​​de formulário com a função PHP print_r .

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

Quando você visita a página em que o formulário está, as variáveis ​​(e nome) serão exibidas.

Uma maneira mais fácil de acessar (ou melhor, visualizar) as informações seria usar a função dpm () fornecida pelo módulo Devel . Você pode usá-lo da mesma maneira que usaria print_r.

Bart
fonte
1
Dado o código relatado, não há necessidade de ver o conteúdo da $formvariável.
kiamlaluno
10
Também $ form_id é um parâmetro que você pode imprimi-lo diretamente !!
Niksmac
1
Se você tem Devel habilitado, apenasdpm($form_id);
Sem Sssweat
35

Localizando o FORM ID sem instalar o módulo

Encontrar o ID do formulário é muito fácil, não é necessário instalar módulos e todos

PASSO 1: Abra você na página de edição (OU inspecione seu formulário).

PASSO 2: se for um nó, encontre " nó-forma " no elemento de inspeção

Localizando o ID do Formulárioverifique se você está no elemento do formulário .

PASSO 3: veja a imagem anexada, o texto verde destacado é o ID do formulário

PASSO 4: IMPORTANTE Finalmente, se você quiser usá-lo, hook_form_alter()substitua o hypen por sublinhado

Por exemplo: yourform_id_with_content_type_name_form

Da mesma forma, você pode encontrar o ID de qualquer formulário no drupal. Tudo o que você precisa fazer é inspecionar-> encontrar o elemento do formulário e procurar o atributo ID e usá-lo

Espero que ajude :)

DEVARAJ JOHNSON
fonte
1
Isso não funcionou para mim quando eu quis proteger o formulário de comentários em um site do Drupal 8. Encontrei uma solução neste comentário no drupal.org , onde diz: 1) Encontre um elemento de entrada oculto cujo nameatributo tenha o valor "form_id". 2) Observe o valueatributo do elemento de entrada - o valor do atributo é o ID do formulário desejado. Exemplo: o formulário de comentário nos nós da história possui o ID do formulário "comment_comment_node_story_form". Se você quiser, pode incorporar essas novas informações na sua resposta.
herzbube
10

Se o seu formulário da web estiver localizado em "www.meudominio.com/node/351", o ID do seu formulário será "webform_client_form_351". Portanto, qualquer que seja o seu nid - esse é o seu ID de formulário.

JasmineM
fonte
2
A questão não é sobre o módulo Webform. É sobre o formulário de edição do nó.
kiamlaluno
A questão é sobre o formulário de edição do nó, mas se você deseja encontrar qualquer ID de formulário da Web, isso funciona corretamente.
herci 07/07
Esta resposta está certa, apenas testei.
vicenteherrera
6

Se você souber onde está o código que define o formulário que deseja alterar, procure lá. O ID do formulário é apenas o nome da função que define esse formulário.

Por exemplo, Views define a função views_ui_edit_view_form na linha 875 de views / includes / admin.inc. O filtro de visualizações Seleção Hierárquica procura o ID do formulário na linha 50 de hierarchical_select / modules / hs_taxonomy_views.module em uma função hood_form_alter.

David L
fonte
4

Use a drupal_set_message()função para exibir o ID do formulário.

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

Use o módulo Obter ID do formulário para descobrir facilmente o ID de qualquer formulário no Drupal.

Aqui está uma citação sobre ele na página do projeto:

Ao passar o mouse sobre qualquer formulário, você verá um link contextual disponível. Ao expandir o link, você verá o ID do formulário. Clique no link e você verá uma janela modal com o ID do formulário copiável e a sugestão de hook_form_FORM_ID_alter ().

Este módulo está obsoleto. Foi aprimorado, estendido e renomeado como debug do formulário Devel ; use-o.

Divulgação: Eu sou mantenedor desses módulos.

Tim
fonte
3

Como o código que você relatou está procurando o ID do formulário do nó, há dois casos.

Drupal 6

Se o código estiver tentando alterar o formulário usado para definir as configurações de um tipo de conteúdo, use a seguinte instrução IF.

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

Se o código estiver tentando alterar o formulário de edição do nó, o código deverá usar a seguinte instrução IF.

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

Drupal 7 e superior

No primeiro caso, a declaração IF deve ser a seguinte:

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

Usando uma abordagem diferente, supondo que mymodule seja o nome abreviado do seu módulo, você pode usar mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Desde o Drupal 7, todos os ganchos usados ​​para alterar a forma implementada por outro módulo recebem $form_ido último parâmetro. Veja hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

No segundo caso, a declaração IF é a mesma usada para o Drupal 6.

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

Primeiro instale o módulo Devel. Em seguida, crie um módulo como o código abaixo

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

Em seguida, você poderá ver TODOS os detalhes de um formulário, como ID do formulário, nomes de campos, etc.

sokratis
fonte