我希望能够在Drupal 6中自定义用户注册表单。
我已经找到了数千个教程,可以向我展示如何覆盖整个表单的输出结构,但是我想移动表单元素等等,我似乎无法找到最好的方法来实现这一点。
我希望能够在Drupal 6中自定义用户注册表单。
我已经找到了数千个教程,可以向我展示如何覆盖整个表单的输出结构,但是我想移动表单元素等等,我似乎无法找到最好的方法来实现这一点。
user_register()
。简而言之,你需要构建一个关联数组;数组中的每个元素都对应一个表单元素。fieldset
来将元素分组。当你使用一个fieldset时,它会创建一个带有自己权重值的表单部分。
假设你有一个包含三个字段的表单:姓名、公司和电子邮件地址。应该首先显示姓名,其次是公司,第三是电子邮件地址。可以这样指定表单:
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#weight' => 1,
);
$form['company'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#weight' => 2,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address'),
'#weight' => 3,
);
#weight
键。如果您希望公司出现在电子邮件地址之后,您需要将$form['company']['#weight']
设置为比3更高的值。$form['personal'] = array(
'#type' => 'fieldset',
'#title' => t('Personal information'),
'#weight' => 1,
);
$form['personal']['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#weight' => 1,
);
$form['personal']['company'] = array(
'#type' => 'textfield',
'#title' => t('Company'),
'#weight' => 2,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address'),
'#weight' => 3,
);
$form['personal']
的数组元素包括Name和Company。#weight
设置为高于2。由于Name现在是一个具有较低#weight
的字段集的一部分,即使您将$form['personal']['name']['#weight']
设置为4,它也不会使Name显示在E-mail address之后。hook_form_alter()
来修改user_register
表单,以更改某些表单元素的权重,创建自己的字段集,并将某些表单元素移动到新创建的字段集中。hook_form_alter()
:function test_form_alter(&$form, $form_state, $form_id) {
if ($form_id === 'user_register') { // Only modify the user registration form
// Before you can get down to business, you need to figure out the
// structure of the user registration form. Use var_dump or kpr to dump
// the $form array.
// Note: if you want to use kpr on the user registration form, give
// anonymous permission to see devel information.
// kpr($form);
// Move Name field to after E-Mail field
$form['name']['#weight'] = 2;
$form['mail']['#weight'] = 1;
// Group Name and E-mail together into a fieldset
$form['personal_info'] = array(
'#type' => 'fieldset',
'#title' => t('Personal information'),
);
$form['personal_info']['name'] = $form['name'];
$form['personal_info']['mail'] = $form['mail'];
// The last block only copied the elements: unset the old ones.
unset($form['name']);
unset($form['mail']);
}
}
$form ['name']
与$form ['group']['name']
不同,并且与$form ['other_group']['name']
也不同。在user_register
表单上,您大部分时间都不必担心这个问题,但请查看#tree和#parents手册页面以获取更多信息。MYMODULE_form_user_profile_form_alter(&$form, $form_state) {
// do your processing here
var_dump($form);
}
将MYMODULE替换为您的模块名称。
您将看到表单的结构,您可以在其中更改值以更改标签权重、描述等。
hook_theme()
函数,假设你的模块名称为'd6_forms':function d6_forms_theme() {
return array(
'user_register' => array(
'template' => 'templates/user-register-form',
'arguments' => array('form' => NULL),
),
);
}
<?php
// What is in that $form var ? To check, uncomment next line
// print '<pre>' . print_r($form, 1) . '</pre>';
?>
<div style="background-color:#ddd;padding:10px;">
<?php print drupal_render($form['name']); ?>
<?php print drupal_render($form['mail']); ?>
</div>
<div>
<?php print drupal_render($form['submit']); ?>
</div>
<?php print drupal_render($form); ?>
您只需要启用个人资料模块,这将允许在注册表单中放置更多字段。
请观看这个简单的视频教程,对Drupal初学者非常有帮助。