例如,在注册表单中,有“用户名”和输入 type="text" name="name" ... 的文本字段。
我需要知道如何从输入字段的名称中获取标题。
我期待这样的功能:
$title = get_title_for_element('name');
结果:
assert($title == 'Username'); // is true
Drupal中有这样的东西吗?
谢谢。
例如,在注册表单中,有“用户名”和输入 type="text" name="name" ... 的文本字段。
我需要知道如何从输入字段的名称中获取标题。
我期待这样的功能:
$title = get_title_for_element('name');
结果:
assert($title == 'Username'); // is true
Drupal中有这样的东西吗?
谢谢。
您拥有可用于验证功能的表单和表单状态变量。您应该使用form_set_error()来设置错误。
我不知道哪个函数会从值数组映射到表单数组。但解决它并不难。了解表单数据结构是构建 drupal 时需要的关键技能之一。
在这种情况下,相关表单由user_edit_form生成(以迂回方式) ,您可以在其中看到数据结构。
$form['account']['name']
是用户名字段。并且标题的数组键与'#title'
大多数情况下的表单元素一样。
如我所见,您可以通过两种不同的方式进行操作。让我们创建一个名为mycustomvalidation.module的模块(记住也要创建mycustomvalidation.info文件)。
注意:下面的代码没有经过测试,所以你可能需要做一些小的调整。顺便说一下,这是 Drupal 6.x 代码。
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."));
}
}
}
?>
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']));
}
}
?>