Jak mogę znaleźć identyfikator formularza?

22

Jak uzyskać identyfikator formularza mojego formularza? Właśnie zacząłem tworzyć moduły i jestem w bezruchu. Mam ten kod od kogoś innego i próbuję go dostosować:

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';
  }
}
zaklęcie
źródło
2
Możliwy duplikat: drupal.stackexchange.com/questions/5605/…
Laxman13
proszę zobaczyć odpowiedzi na powyższe pytanie, powinno również odpowiedzieć na twoje pytanie
Laxman13
1
Pytanie tutaj jest zupełnie inne; nie pyta, jak zidentyfikować element formularza, ale który jest identyfikatorem formularza, który należy sprawdzić przy implementacji hook_form_alter(). Biorąc pod uwagę również zgłoszony kod, powiedziałbym, że to pytanie jest inne.
kiamlaluno

Odpowiedzi:

17

Spróbuj wydrukować zmienne formularza za pomocą funkcji PHP print_r .

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

Kiedy odwiedzasz stronę, formularz jest włączony, zostaną wyświetlone zmienne (i nazwa).

Łatwiejszym sposobem uzyskania dostępu (lub raczej przeglądania) informacji byłoby użycie funkcji dpm () dostarczonej przez moduł Devel . Możesz używać go w taki sam sposób, jak print_r.

Bart
źródło
1
Biorąc pod uwagę zgłaszany kod, nie ma potrzeby przeglądania zawartości $formzmiennej.
kiamlaluno
10
Również $ form_id to parametr, który możesz bezpośrednio wydrukować !!
niksmac
1
Jeśli masz włączony Devel , po prostudpm($form_id);
No Sssweat
35

Znajdowanie ID FORMULARZA bez instalowania modułu

Znalezienie identyfikatora formularza jest bardzo łatwe, bez potrzeby instalowania modułów i wszystkich innych

KROK 1: Otwórz cię od przejścia do strony edycji (LUB sprawdź formularz).

KROK 2: jeśli jest to forma węzła, znajdź „ formę węzła ” w elemencie kontrolnym

Znalezienie identyfikatora formularzasprawdź, czy jesteś w elemencie formularza .

KROK 3: patrz załączony obraz podświetlony zielony tekst jest identyfikatorem formularza

KROK 4: WAŻNE Wreszcie, jeśli chcesz go używać w hook_form_alter()wymień hypen z podkreśleniem

Na przykład: yourform_id_with_content_type_name_form

Podobnie jak mądry, możesz znaleźć identyfikator dowolnej formy w Drupal, wszystko co musisz zrobić, to sprawdzić-> znajdź element formularza i wyszukaj atrybut ID i użyj go

Mam nadzieję, że to pomoże :)

DEVARAJ JOHNSON
źródło
1
Nie działało to dla mnie, gdy chciałem chronić formularz komentarza na stronie Drupal 8. Znalazłem rozwiązanie w tym komentarzu na drupal.org , gdzie napisano: 1) Znajdź ukryty element wejściowy, którego nameatrybut ma wartość „form_id”. 2) Spójrz na valueatrybut elementu wejściowego - wartością atrybutu jest pożądany identyfikator formularza. Przykład: Formularz komentarza do węzłów wątku ma identyfikator formularza „komentarz_koment_node_story_form”. Jeśli chcesz, możesz dołączyć te nowe informacje do swojej odpowiedzi.
herzbube
10

Jeśli Twój formularz internetowy znajduje się pod adresem „www.moja_domena.com/node/351”, wówczas identyfikator formularza to „webform_client_form_351”. Tak więc, niezależnie od tego, jaki jest twój identyfikator - to twój identyfikator formularza.

JasmineM
źródło
2
Pytanie nie dotyczy modułu Webform. Chodzi o formularz edycji węzła.
kiamlaluno
Pytanie dotyczy formularza edycji węzła, ale jeśli chcesz znaleźć identyfikator formularza internetowego, działa to poprawnie.
herci
Ta odpowiedź jest poprawna, właśnie ją przetestowałem.
vicenteherrera
6

Jeśli wiesz, gdzie jest kod definiujący formę, którą chcesz zmienić, poszukaj tam. Identyfikator formularza to tylko nazwa funkcji definiującej ten formularz.

Na przykład Widoki definiują funkcję views_ui_edit_view_form w wierszu 875 widoków / obejmuje / admin.inc. Filtr widoków Hierarchical Select szuka tego identyfikatora formularza w wierszu 50 hierarchical_select / modules / hs_taxonomy_views.module w funkcji hood_form_alter.

David L.
źródło
4

Użyj drupal_set_message()funkcji, aby wyświetlić identyfikator formularza.

function hook_form_alter(&$form, $form_state, $form_id) {
drupal_set_message($form_id);
// other codes
}
Utsav Sinha
źródło
4

Użyj modułu Get Form ID , aby łatwo znaleźć identyfikator formularza dowolnego formularza w Drupal.

Oto cytat na ten temat ze strony projektu:

Po najechaniu kursorem na dowolny formularz zobaczysz link kontekstowy. Po rozwinięciu łącza zobaczysz identyfikator formularza. Kliknij na link, a zobaczysz okno modalne z możliwym do skopiowania formularzem id i sugestią hook_form_FORM_ID_alter ().

Ten moduł jest przestarzały. Został on ulepszony, rozszerzony i przemianowany podczas debugowania formularza Devel ; użyj go zamiast tego.

Ujawnienie: Jestem opiekunem tych modułów.

Tim
źródło
3

Ponieważ zgłoszony kod szuka identyfikatora formularza formularza węzła, istnieją dwa przypadki.

Drupal 6

Jeśli kod próbuje zmienić formę używaną do ustawienia ustawień dla typu zawartości, powinien użyć następującej instrukcji IF.

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

Jeśli kod próbuje zmienić formularz edycji węzła, wówczas kod powinien użyć następującej instrukcji IF.

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

Drupal 7 i wyższy

W pierwszym przypadku instrukcja IF powinna być następująca:

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

Używając innego podejścia, zakładając, że mymoduł jest krótką nazwą twojego modułu, możesz użyć mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Od Drupala 7 wszystkie haki użyte do zmiany formy zaimplementowanej przez inny moduł stają się $form_idostatnim parametrem. Zobacz hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

W drugim przypadku instrukcja IF jest taka sama, jak w przypadku Drupala 6.

if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) { /* … */ }
kiamlaluno
źródło
1

Najpierw zainstaluj moduł Devel. Następnie utwórz moduł podobny do poniższego kodu

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

Następnie możesz wyświetlić WSZYSTKIE szczegóły formularza, takie jak identyfikator formularza, nazwy pól formularza itp.

sokratis
źródło