如何在Drupal中获取表单元素的标题?

时间:2010-07-06 08:18:52

标签: drupal drupal-6 drupal-forms

例如,在注册表单中,有“用户名”及其文本字段,其输入类型=“text”name =“name”....

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

我期待的功能如下:

$title = get_title_for_element('name');

结果:

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

Drupal中有这样的东西吗?

感谢。

2 个答案:

答案 0 :(得分:2)

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

我所知道的函数不会从values数组映射到表单数组。但要解决这个问题并不困难。理解表单数据结构是构建drupal时所需的关键技能之一。

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

答案 1 :(得分:0)

你可以用我看到的两种不同方式做到这一点。让我们创建一个名为 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']));
  }
}
?>