Как я могу найти идентификатор формы?


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 - это параметр, который вы можете распечатать напрямую!
Никсмак

1
Если у вас есть Devel включен, простоdpm($form_id);
каких - либо Sssweat

35

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

Найти идентификатор формы очень просто, нет необходимости устанавливать модули и все

ШАГ 1: Откройте вас, перейдите на страницу редактирования (ИЛИ проверьте вашу форму).

ШАГ 2: если это форма узла, найдите « форму узла » в элементе inspect

Нахождение идентификатора формыпроверьте, что вы находитесь в элементе формы .

ШАГ 3: см. Прикрепленное изображение, выделенный зеленый текст является идентификатором формы

ШАГ 4: ВАЖНО Наконец, если вы хотите использовать его в качестве hook_form_alter()замены Hypen с подчеркиванием

Например: yourform_id_with_content_type_name_form

Точно так же вы можете найти id любой формы в drupal, все, что вам нужно сделать, это проверить-> найти элемент формы и найти атрибут ID и использовать его.

Надеюсь, это поможет :)


1
Это не сработало для меня, когда я хотел защитить форму комментариев на сайте Drupal 8. Я нашел решение в этом комментарии на drupal.org , где говорится: 1) Найдите скрытый элемент ввода, nameатрибут которого имеет значение «form_id». 2) Посмотрите на valueатрибут входного элемента - значением атрибута является требуемый идентификатор формы. Пример: форма комментария на узлах истории имеет идентификатор формы "comment_comment_node_story_form". Если вам нравится, вы можете включить эту новую информацию в свой ответ.
Герцбуб

10

Если ваша веб-форма расположена по адресу «www.mydomain.com/node/351», тогда идентификатором вашей формы будет «webform_client_form_351». Итак, какой бы ни был ваш nid - это ваш идентификатор формы.


2
Вопрос не в модуле Webform. Речь идет о форме редактирования узла.
kiamlaluno

Вопрос касается формы редактирования узла, но если вы хотите найти любой идентификатор формы веб-формы, это работает правильно.
Герси

Этот ответ правильный, только что проверил.
Vicenteherrera

6

Если вы знаете, где находится код, определяющий форму, которую вы хотите изменить, посмотрите там. Идентификатор формы - это просто имя функции, определяющей эту форму.

Например, Views определяет функцию views_ui_edit_view_form в строке 875 views / includes / admin.inc. Фильтр представлений Hierarchical Select ищет этот идентификатор формы в строке 50ierarchical_select / modules / 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

Используйте модуль Получить идентификатор формы, чтобы легко узнать идентификатор формы любой формы в Drupal.

Вот цитата об этом со страницы проекта:

При наведении курсора на любую форму вы увидите доступную контекстную ссылку. Развернув ссылку, вы увидите идентификатор формы. Нажмите на ссылку, и вы увидите модальное окно с копируемым идентификатором формы и подсказкой hook_form_FORM_ID_alter ().

Этот модуль устарел. Это было улучшено, расширено и переименовано как отладка формы Devel ; используйте это вместо этого.

Раскрытие: я поддерживаю эти модули.


3

Поскольку код, который вы сообщили, ищет идентификатор формы формы узла, есть два случая.

Drupal 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.