在 Joomla 2.5 站点中,我想在注册用户完成表单后将其分配到另一个组。用户将在完成将在 Fabrik 中创建的表单时登录,以便我可以添加一个 PHP 脚本以在保存时运行。我的php技能很初级。将当前用户添加到组的 php 中的行是什么样的?
5 回答
您可以使用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。我还没有找到一种无需进入数据库即可检索组列表的方法,但这可能会有所帮助。
带有用户组的(未编辑)数据库的屏幕截图:
在这里,我使用了一种不同的方法,因为 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();
我正在使用 Joomla 3.7.5,这个方法对我有用:
JUserHelper::setUserGroups($joomlaId, array(10));
其中,$joomlaId 是我要更改的用户的 ID。这将用户设置为仅组 10 的成员,并立即将更改保存到用户数据库。
您可能还想查看addUserToGroup方法(自 Joomla Platform 11.1 起)
JUserHelper::addUserToGroup (JFactory::getUser()->id, 3); // 3 Is the group number
因此,例如,如果您的用户之前属于“已注册”组 (id=2),那么此后他/她也将被分配到组 3。
同样,还有removeUserFromGroup方法,它做相反的事情。
根据文档,请注意setUserGroups方法支持组的数组,而我在这里提到的其他 2 种方法支持整数可能很有用。
setUserGroups(integer $userId, array $groups) : boolean
addUserToGroup(integer $userId, integer $groupId) : boolean
removeUserFromGroup(integer $userId, integer $groupId) : boolean
我在 joomla 3 中找不到任何有用的方法来做到这一点,所以这里有一个快速帮助那些只需要它工作的人:
$db = JFactory::getDbo();
$db->setQuery("replace into xo6uf_user_usergroup_map values ($user_id, $group_id)");
$db->query();