如何使用php更改Joomla用户组

3
在Joomla 2.5网站中,我想在用户完成表单后将其分配到另一个组。用户在填写表单时会被登录,该表单将在Fabrik中创建,以便我可以添加一个PHP脚本来运行保存操作。我的PHP技能很基础。如何编写PHP代码将当前用户添加到一个组中?

1
请查看以下关于编程的文档:http://docs.joomla.org/Changing_user_groups 和http://docs.joomla.org/Custom_user_groups - riti
5个回答

4

您可以使用JUserHelper::setUserGroups来设置用户的组别。

要检索当前用户,您可以使用JFactory::getUser

当您获得用户时,您可能(我还没有确认过)可以立即获取id。以下是一些未经测试的代码,希望能帮助您:

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

或者简单地说:

 JUserHelper::setUserGroups(JFactory::getUser()->id, 3); // 3 Is the group number

您可以通过进入 table-prefix_usergroups 表并检索主键来找到组ID。我没有找到一种不需要进入数据库就能检索组列表的方法,但是 this 可能会有所帮助。

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

Usergroups joomla 2.5


请注意,如果在Joomla 3.x中使用此代码似乎会引发SQL错误。 - RozzA

2
我正在使用Joomla 3.7.5,这种方法对我有效:
JUserHelper::setUserGroups($joomlaId, array(10));

在此,$joomlaId是我想更改的用户ID。这将用户设置为仅属于10号组,并立即将更改保存到用户数据库。


我确认它可以与最新的Joomla 3.x版本一起使用。您可以将用户分配给多个组,将其编号插入数组中。组的ID可以在后端看到,无需访问数据库。 - Francesco Galgani

2

在这里,我采用了不同的方法,因为JUserHelper::setUserGroups方法在我的Joomla 3.3.1安装中总是失败。

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

这对我(J!3.3.x)也很有效,并且抽象了直接使用数据库命令的方式。 - RozzA

1

你可能还想看一下 addUserToGroup 方法(自 Joomla 平台 11.1 版本起可用)

JUserHelper::addUserToGroup (JFactory::getUser()->id, 3); // 3 Is the group number

例如,如果您的用户以前在“已注册”组(id=2)中,那么执行此操作后,他/她也将被分配到第3组。

类似地,还有一个removeUserFromGroup方法,它执行相反的操作。

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

setUserGroups(integer $userId, array $groups):布尔值

addUserToGroup(integer $userId, integer $groupId):布尔值

removeUserFromGroup(integer $userId, integer $groupId):布尔值

https://api.joomla.org/cms-3/classes/JUserHelper.html


0
我在Joomla 3中找不到任何有用的方法来做这件事,所以这里是一个快捷方式,适用于只需要使其工作的人:
$db = JFactory::getDbo();
$db->setQuery("replace into xo6uf_user_usergroup_map values ($user_id, $group_id)");
$db->query();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接