如何找到表格的表格ID?


22

如何获取我的表格的表格ID?我刚刚开始制作模块,但现在处于停滞状态。我从别人那里得到了这段代码,并试图对其进行自定义:

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


请查看上述问题的答案,它也应该回答您的问题
Laxman13 2011年

1
这里的问题是完全不同的。它不是在问如何识别表单元素,而是要在实现中检查的表单ID hook_form_alter()。考虑到报告的代码,我会说这个问题是不同的。
kiamlaluno

Answers:


17

尝试使用PHP函数print_r打印表单变量。

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

当您访问该页面时,将显示变量(和名称)。

访问(或查看)信息的更简单方法是使用Devel模块提供的dpm()函数。您可以像使用print_r一样使用它。


1
给定所报告的代码,则无需查看$form变量的内容。
kiamlaluno

10
$ form_id也是一个参数,您可以直接打印它!
niksmac 2012年

1
如果你有杰韦利启用,只是dpm($form_id);
无Sssweat

35

在不安装模块的情况下查找FORM ID

查找表单ID非常容易, 无需安装模块和所有

第1步:从其编辑页面打开您的页面(或检查您的表单)。

步骤2:如果其节点形式在检查元素中找到“ 节点形式

查找表单ID检查您是否在表单元素中。

步骤3:查看所附图片,突出显示的绿色文本是表单的ID

步骤4:重要最后,如果要使用它,下划线hook_form_alter()替换连字符

例如: yourform_id_with_content_type_name_form

就像明智的做法一样,您可以在drupal中找到任何形式的id,只需检查->查找表单元素并搜索ID属性并使用它

希望能帮助到你 :)


1
当我想保护Drupal 8网站中的评论表单时,这对我不起作用。我在drupal.org上的此注释中找到了一个解决方案,其中说:1)找到一个隐藏的输入元素,其name属性值为“ form_id”。2)查看输入元素的value属性-该属性的值是所需的表单ID。示例:故事节点上的评论表单的表单ID为“ comment_comment_node_story_form”。如果您愿意,可以在您的答案中包含这些新信息。
herzbube18年

10

如果您的Web表单位于“ www.mydomain.com/node/351”,则您的表单ID将为“ webform_client_form_351”。因此,无论您的身份是什么-​​这就是您的表格ID。


2
问题不在于Webform模块。它是关于节点编辑表单的。
kiamlaluno

问题是关于节点编辑表单的,但是如果您要查找任何Web表单表单ID,则可以正常工作。
herci 2015年

这个答案是正确的,只是测试一下。
vicenteherrera,2015年

6

如果您知道定义您要更改的表单的代码在哪里,请看那里。表单ID只是定义该表单的函数的名称。

例如,“视图”在views / includes / admin.inc的第875行定义函数views_ui_edit_view_form。“分层选择视图”过滤器在hood_form_alter函数中的hierarchical_select / modules / hs_taxonomy_views.module的第50行中查找该表单ID。



4

使用“ 获取表单ID”模块可以轻松找到Drupal中任何表单的表单ID。

以下是其项目页面中的报价:

将鼠标悬停在任何表单上,您将看到可用的上下文链接。通过展开链接,您将看到表单ID。单击链接,您将看到一个模态窗口,其中包含可复制的表单ID和hook_form_FORM_ID_alter()挂钩建议。

不建议使用此模块。对其进行了改进,扩展和重新命名为Devel form debug;改用它。

披露:我是这些模块的维护者。


3

当您报告的代码正在寻找节点表单的表单ID时,有两种情况。

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

然后,您可以查看表单的所有详细信息,例如表单ID,表单的字段名称等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.