根据角色向Drupal 7用户配置文件添加自定义字段

时间:2013-07-26 06:09:16

标签: drupal field registration profile

我在Drupal 7网站上禁用了用户注册。只有管​​理员才能创建帐户。

我想为用户添加自定义字段,具体取决于管理员分配用户的角色。现在我想在注册系统中添加一些依赖于管理员所选角色的字段。

例如:如果管理员创建了具有角色A的用户帐户和具有角色B的另一个帐户。 当用户登录时,应要求用户A输入电话号码,而应要求第二个用户输入家庭地址。

我尝试过profile2模块但是我无法达到我想要的效果。

2 个答案:

答案 0 :(得分:2)

使用完全符合您要求的User_Role_Field模块。如果每个角色访问需要更好的配置,请使用Field_Permissions模块。

请注意,在用户注册后,字段显示在用户配置文件下,而不是注册表单中。你的问题有点令人困惑......

答案 1 :(得分:0)

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“]'=>数组('checked'=> TRUE),”行将需要最多的工作,即“角色”将需要匹配名称属性“角色”复选框,“A”在检查时需要与A的实际值相对应。

如果您的模块中没有其他form_alter用法,您可能还会考虑用“yourmodule_user_register_form_alter”替换函数名称。