Як я можу знайти ідентифікатор форми форми?


22

Як отримати ідентифікатор форми моєї форми? Я тільки почав виготовляти свої модулі і я затих. Я отримав цей код від когось іншого і намагаюся його налаштувати:

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';
  }
}

2
Можливий дублікат: drupal.stackexchange.com/questions/5605/…
Laxman13

будь ласка, подивіться відповіді на питання вище, воно також повинно відповісти на ваше запитання
Laxman13

1
Питання тут зовсім інше; це не запитання, як визначити елемент форми, але який ідентифікатор форми, який слід перевірити при впровадженні hook_form_alter(). Враховуючи також звітний код, я б сказав, що це питання відрізняється.
kiamlaluno

Відповіді:


17

Спробуйте надрукувати змінні форми за допомогою функції PHP print_r .

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

Під час відвідування сторінки, на якій форму знаходиться, відображаються змінні (та ім’я).

Простішим способом доступу (а точніше перегляду) інформації буде використання функції dpm (), що надається модулем Devel . Ви можете використовувати його так само, як і print_r.


1
Враховуючи звітний код, немає необхідності бачити вміст $formзмінної.
kiamlaluno

10
Також $ form_id - парам, ви можете безпосередньо надрукувати його !!
niksmac

1
Якщо у вас включено Devel , простоdpm($form_id);
No Sssweat

35

Пошук ідентифікатора форми без встановлення модуля

Пошук ідентифікатора форми дуже простий, не потрібно встановлювати модулі та все

КРОК 1: Відкрийте вас, перейдіть на сторінку редагування (АБО перевірте форму).

КРОК 2: якщо його форма вузла знайде " форму вузла " в елементі перевірки

Пошук ідентифікатора формиперевірте, що ви перебуваєте в елементі форми

КРОК 3: див. Додане зображення, виділеним зеленим текстом є ідентифікатор форми

КРОК 4: ВАЖЛИВО Нарешті, якщо ви хочете використовувати його в hook_form_alter()заміні гіпена на підкреслення

Наприклад: yourform_id_with_content_type_name_form

Як і мудрий, ви можете знайти ідентифікатор будь-якої форми в drupal. Все, що вам потрібно зробити, - це перевірити-> знайти елемент форми та знайти атрибут ID і використовувати його

Сподіваюся, це допомагає :)


1
Це не спрацювало для мене, коли я хотів захистити форму коментарів на сайті Drupal 8. Я знайшов рішення в цьому коментарі на drupal.org , де написано: 1) Знайдіть прихований вхідний елемент, nameатрибут якого має значення "form_id". 2) Подивіться на valueатрибут вхідного елемента - значення атрибута - це потрібний ідентифікатор форми. Приклад: Форма коментаря до вузлів історії має ідентифікатор форми "comment_comment_node_story_form". Якщо вам подобається, ви можете включити цю нову інформацію у свою відповідь.
herzbube

10

Якщо ваша веб-форма розміщена за адресою "www.mydomain.com/node/351", ідентифікатор вашої форми буде "webform_client_form_351". Отже, що б ви не були - це ваш ідентифікатор форми.


2
Питання не в модулі Webform. Йдеться про форму редагування вузла.
kiamlaluno

Питання стосується форми редагування вузла, але якщо ви хочете знайти будь-який ідентифікатор форми веб-форми, це справно працює.
herci

Ця відповідь правильна, просто перевірена.
vicenteherrera

6

Якщо ви знаєте, де знаходиться код, який визначає форму, яку ви хочете змінити, подивіться там. Ідентифікатор форми - це лише назва функції, що визначає цю форму.

Наприклад, Views визначає функцію views_ui_edit_view_form у рядку 875 перегляду / включає / admin.inc. Фільтр ієрархічних виділень перегляду шукає ідентифікатор форми в рядку 50 ієрархічного_вибору / модулів / hs_taxonomy_views.module у функції hood_form_alter.


4

Використовуйте drupal_set_message()функцію для відображення ідентифікатора форми

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

4

Використовуйте модуль Get Form ID для легкого пошуку ідентифікатора форми будь-якої форми в Drupal.

Ось цитата про це зі сторінки проекту:

Якщо навести курсор на будь-яку форму, ви побачите доступне контекстне посилання. Розширивши посилання, ви побачите ідентифікатор форми. Перейдіть за посиланням, і ви побачите модальне вікно з копіюваним ідентифікатором форми та пропозицією про гачок гачка_form_FORM_ID_alter ().

Цей модуль застарілий. Він був удосконалений, розширений та ребрендований як налагодження форми Devel ; використовувати замість цього.

Розкриття: Я підтримую ці модулі.


3

Оскільки код, про який ви повідомили, шукає ідентифікатор форми форми вузла, є два випадки.

Друпал 6

Якщо код намагається змінити форму, яка використовується для встановлення налаштувань типу вмісту, то він повинен використовувати наступний оператор IF.

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

Якщо код намагається змінити форму редагування вузла, тоді в коді слід використовувати наступний оператор IF.

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

Drupal 7 і вище

У першому випадку IF-оператор повинен бути наступним:

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

Використовуючи інший підхід, припустивши, що mymodule - це коротка назва вашого модуля, який ви можете використати mymodule_form_node_type_form_alter(&$form, &$form_state, $form_id). Починаючи з Drupal 7, усі гачки, що використовуються для зміни форми, реалізованої іншим модулем, отримують $form_idяк останній параметр. Див hook_form_alter () , hook_form_FORM_ID_alter () , hook_form_BASE_FORM_ID_alter () .

У другому випадку IF-оператор такий же, як і для Drupal 6.

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

1

Спочатку встановіть модуль Devel. Потім створіть такий модуль, як код нижче

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

Тоді ви можете побачити ВСІ деталі форми, наприклад ідентифікатор форми, назви полів тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.