【问题标题】:How can I get the title of a form element in Drupal?如何在 Drupal 中获取表单元素的标题?
【发布时间】:2010-07-06 08:18:52
【问题描述】:

例如,在注册表单中,有“用户名”和输入 type="text" name="name" ....

我需要知道如何从输入字段的名称中获取标题。

我期待这样的功能:

$title = get_title_for_element('name');

结果:

assert($title == 'Username'); // is true

Drupal 中有这样的东西吗?

谢谢。

【问题讨论】:

  • 你是在说单元测试吗?您是否尝试在特定或 drupals 表单处理过程中对表单进行单元测试?
  • 您应该真正添加要在哪个上下文中执行此操作。如果您有可用的表单数组,则不难看到标题和其他属性。
  • 我使用它的上下文是我想在显示给用户的错误消息中包含字段标题。也就是说,我不希望出现“不应包含空格”之类的错误消息,而是“用户名,不应包含空格”更正确。这就是为什么我需要弄清楚标题。
  • 我知道这样的数据存在于 $form 数组变量中,但是理解 $form 数据结构并从中提取正确的数据很忙,特别是当不同的输入元素属于不同的组名时.
  • 你在哪里做验证?

标签: drupal drupal-6 drupal-forms


【解决方案1】:

您的验证函数可以使用表单和表单状态变量。您应该使用form_set_error() 来设置错误。

据我所知,没有哪个函数可以从值数组映射到表单数组。但是解决它并不难。了解表单数据结构是构建 drupal 时需要的关键技能之一。

在这种情况下,有问题的表单由user_edit_form 生成(以迂回方式),您可以在其中看到数据结构。 $form['account']['name'] 是用户名字段。标题的数组键是'#title',因为它在大多数情况下用于表单元素。

【讨论】:

  • 以上对我仍然不起作用。我使用 Drupal 的管理 -> 用户管理 -> 配置文件在注册表单中添加了额外的字段。名称是 profile_fullname、profile_mobile_no、profile_landline、profile_occupation。我无法在 ['account'] 键下的 $form 数组中找到它们,它们位于 ['#uid']['User Information']['profile_fullname'] 内的其他地方。看,问题是我需要一个一致的函数来根据输入元素名称提取我需要的内容。
【解决方案2】:

在我看来,您可以通过两种不同的方式进行操作。让我们创建一个名为 mycustomvalidation.module 的模块(记得也要创建 mycustomvalidation.info 文件)。

注意:以下代码未经测试,因此您可能需要进行一些小调整。顺便说一下,这是 Drupal 6.x 的代码。

1) 使用hook_user()

您需要的是一个自定义模块,其中包含您自己的 hook_user() http://api.drupal.org/api/function/hook_user/6 实现。

<?php
function mycustomvalidation_user($op, &$edit, &$account, $category = NULL) {
  if ($op == 'validate') {
    // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
    if ($edit['profile_fullname'] != '') {
      form_set_error('profile_fullname', t("Field 'Fullname' must not be empty."));
    }
  }
}
?>

2) 使用form_alter() 和自定义验证函数

就我个人而言,我会选择这个选项,因为我觉得它更简洁、更“正确”。我们将在此处向我们的配置文件字段添加自定义验证功能。

<?php
function mycustomvalidation_form_alter(&$form, $form_state, $form_id) {
  // Check if we are loading 'user_register' or 'user_edit' forms.
  if ($form_id == 'user_register' || $form_id == 'user_edit') {
    // Add a custom validation function to the element.
    $form['User information']['profile_fullname']['#element_validate'] = array('mycustomvalidation_profile_fullname_validate');
  }
}

function mycustomvalidation_profile_fullname_validate($field) {
  // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
  if ($field['#value'] != '') {
    form_set_error('profile_fullname', t("Field %title must not be empty.", array('%title' => $field['#title']));
  }
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2023-03-24
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多