我在我的 Drupal 7 网站上禁用了用户注册。只有管理员可以创建帐户。
我想根据管理员为用户分配的角色为用户添加自定义字段。现在我想向注册系统添加一些字段,这些字段取决于管理员选择的角色。
例如:如果管理员创建了一个角色 A 的用户帐户和另一个角色 B 的帐户。当用户登录时,应要求用户 A 输入电话号码,而应要求第二个用户输入家庭地址。
我尝试了 profile2 模块,但无法实现我想要的。
我在我的 Drupal 7 网站上禁用了用户注册。只有管理员可以创建帐户。
我想根据管理员为用户分配的角色为用户添加自定义字段。现在我想向注册系统添加一些字段,这些字段取决于管理员选择的角色。
例如:如果管理员创建了一个角色 A 的用户帐户和另一个角色 B 的帐户。当用户登录时,应要求用户 A 输入电话号码,而应要求第二个用户输入家庭地址。
我尝试了 profile2 模块,但无法实现我想要的。
使用完全符合您要求的User_Role_Field模块。如果您需要每个角色访问更好的配置,请使用Field_Permissions模块。
请注意,在用户注册后,这些字段将显示在用户个人资料下,而不是在注册表单中。你的问题有点混乱...
有conditional_fields模块,听起来它可以让你大部分时间到达那里。
如果做不到这一点,我会说你最好的选择是在自定义模块中使用 hook_form_alter() 。就像是:
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'user_register') {
// Define the phone field.
$form['phone'] = array(
'#type' => 'textfield',
'#title' => t('Phone'),
'#size' => 30,
'#maxlength' => 30,
'settings' => array(
'#states' => array(
// Hide this field when role A isn't checked.
'invisible' => array(
':input[role="A"]' => array('checked' => FALSE),
),
),
),
);
// Define home address field
// [copy the snippet above & tweak to suit...]
}
}
这不太可能开箱即用(我手头没有drupal环境),但经过一些调整,它应该可以让你大部分时间到达那里。
"':input[role="A"]' => array('checked' => TRUE)," 行需要做最多的工作,即 "role" 需要匹配 "Roles" 复选框的名称属性,并且“A”在选中时需要与A的实际值相对应。
如果您的模块中没有其他 form_alter 用法,您也可以考虑将函数名称替换为“yourmodule_user_register_form_alter”。