【发布时间】:2012-11-20 10:25:25
【问题描述】:
在 Joomla 2.5 站点中,我想在注册用户完成表单后将其分配到另一个组。用户将在完成将在 Fabrik 中创建的表单时登录,以便我可以添加一个 PHP 脚本以在保存时运行。我的php技能很初级。将当前用户添加到组的 php 中的行是什么样的?
【问题讨论】:
在 Joomla 2.5 站点中,我想在注册用户完成表单后将其分配到另一个组。用户将在完成将在 Fabrik 中创建的表单时登录,以便我可以添加一个 PHP 脚本以在保存时运行。我的php技能很初级。将当前用户添加到组的 php 中的行是什么样的?
【问题讨论】:
您可以使用JUserHelper::setUserGroups 设置用户的组。
要检索当前用户,您可以使用JFactory::getUser。
当您拥有该用户时,您可以(我尚未确认)可能立即get the 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 可能会有所帮助。
我的(未编辑的)用户组数据库截图:
【讨论】:
这里我使用了不同的方法,因为 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();
【讨论】: