如何使用php更改Joomla用户组

如何使用php更改Joomla用户组,php,joomla2.5,Php,Joomla2.5,在Joomla2.5站点中,我想在注册用户完成表单后将其分配给另一个组。用户将在完成表单时登录,表单将在Fabrik中创建,这样我就可以添加一个PHP脚本在保存时运行。我的php技能还很初级。php中将当前用户添加到组中的行是什么样子的?您可以使用设置用户的组 要检索您可以使用的当前用户 当你有了这个用户,你可能马上就可以(我还没有确认)。一些未经测试的代码有望让您走上正轨: $user = JFactory::getUser(); $userId = $user->id; JUse

在Joomla2.5站点中,我想在注册用户完成表单后将其分配给另一个组。用户将在完成表单时登录,表单将在Fabrik中创建,这样我就可以添加一个PHP脚本在保存时运行。我的php技能还很初级。php中将当前用户添加到组中的行是什么样子的?

您可以使用设置用户的组

要检索您可以使用的当前用户

当你有了这个用户,你可能马上就可以(我还没有确认)。一些未经测试的代码有望让您走上正轨:

 $user = JFactory::getUser();
 $userId = $user->id;
 JUserHelper::setUserGroups($userId, 3);
简言之:

 JUserHelper::setUserGroups(JFactory::getUser()->id, 3); // 3 Is the group number
您可以通过进入
table-prefix\u usergroups
表并检索主键来查找组ID。我还没有找到一种不进入数据库就检索组列表的方法,但可能会有所帮助

带有用户组的我的(未编辑的)数据库的屏幕截图:


在这里,我使用了一种不同的方法,因为Joomla 3.3.1安装时,JUserHelper::setUserGroups方法总是失败

$user = JFactory::getUser();//get current user
$g = array('2'=>2,'3'=>3);//2 for registered user, 3 for author
$user->groups = $g;
$user->save();

在joomla 3中,我找不到任何有用的方法来实现这一点,因此,这里有一个简单的方法,供那些只需要使用它的人使用:

$db = JFactory::getDbo();
$db->setQuery("replace into xo6uf_user_usergroup_map values ($user_id, $group_id)");
$db->query();

您可能还想看看addUserToGroup方法(自Joomla平台11.1以来)

因此,例如,如果您的用户以前在“已注册”组(id=2)中,他/她在此之后也将被分配到组3

类似地,还有一种方法removeUserFromGroup的作用正好相反

根据文档,可能需要注意的是,setUserGroups方法支持组的数组,而我在这里提到的其他两种方法支持整数

setUserGroups(整数$userId,数组$groups):布尔值

addUserToGroup(整数$userId,整数$groupId):布尔值

removeUserFromGroup(整数$userId,整数$groupId):布尔值


我使用的是Joomla 3.7.5,这种方法对我很有效:

JUserHelper::setUserGroups($joomlaId, array(10));

其中,$joomlay是我要更改的用户的id。这会将用户设置为组10的成员,并立即将更改保存到用户数据库。

同时请检查此项。请注意,如果在Joomla 3.x中使用此项,则会引发SQL错误。这项功能对我(J!3.3.x)也很有效,并且不再使用直接数据库命令。我确认它适用于最新的Joomla 3.x版本。您可以将一个用户分配给多个组,并在数组中插入其编号。可以在后端查看组的ID,而无需访问数据库。
JUserHelper::setUserGroups($joomlaId, array(10));