将用户添加到Joomla中的组不工作
我正在尝试向组中添加用户。我可以运行这段PHP代码,没有任何错误,但用户组仍然没有更改将用户添加到Joomla中的组不工作,joomla,joomla3.4,Joomla,Joomla3.4,我正在尝试向组中添加用户。我可以运行这段PHP代码,没有任何错误,但用户组仍然没有更改 <?php define('_JEXEC', 1); define('JPATH_BASE', realpath(dirname(__FILE__))); require_once ( JPATH_BASE .'/includes/defines.php' ); require_once ( JPATH_BASE .'/includes/framework.php' ); require_once (
<?php
define('_JEXEC', 1);
define('JPATH_BASE', realpath(dirname(__FILE__)));
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );
require_once ( JPATH_BASE .'/libraries/joomla/factory.php' );
$userId = 358;
$groupId = 11;
echo JUserHelper::addUserToGroup($userId, $groupId);
?>
可能的简单解决方案:
代码是正确的,它应该将$userId和$groupId放在数据库中,以便在uu user\u usergroup\u映射中精确地显示出来
BTW认为如果使用一个错误的GyPID,这个方法会出现错误,但是如果插入错误的$UERID,并且错误的意思是它不存在,它不会引起任何错误。 因此,用户$userId=358;不存在
更新-硬调试: 好的,在这种情况下,我建议您插入助手的代码 该文件是:libraries/joomla/user/helper.php
在第33行,您有JUserHelper::addUserToGroup
代码如下:
公共静态函数addUserToGroup$userId,$groupId
{
//获取用户对象。
$user=new JUserint$userId;
//如有必要,将用户添加到组中。
如果!在数组$groupId中,$user->groups
{
//获取组的标题。
$db=JFactory::getDbo;
$query=$db->getQuerytrue
->选择$db->quoteName'title'
->从$db->quoteName“用户组”
->其中$db->quoteName'id'.='.int$groupId;
$db->setQuery$query;
$title=$db->loadResult;
//如果组不存在,则返回异常。
如果!$title
{
抛出新的运行时异常“访问用户组无效”;
}
//将组数据添加到用户对象。
$user->groups[$title]=$groupId;
//存储用户对象。
$user->save;
}
如果会话\u id
{
//为任何预加载的用户对象设置组数据。
$temp=JFactory::getUserint$userId;
$temp->groups=$user->groups;
//设置会话中用户对象的组数据。
$temp=JFactory::getUser;
如果$temp->id==$userId
{
$temp->groups=$user->groups;
}
}
返回true;
}
保存组的位是$user->save;。
尝试将var_转储到那里,看看问题出在哪里。我在同一个问题中运行了付款回调。我发现用户组正确地保存在数据库中,但不会在Juser对象中刷新,因为您在不同的会话中将用户添加到组中。当用户在页面上进行交互时,将恢复组 我发现的另一个想法是,如果用户登录,在管理员面板中更改组的方式是相同的 为了解决这个问题,我制作了系统插件,在OnAfterInitialize函数中,我做了:
//get user
$me = JFactory::getUser();
//check if user is logged in
if($me->id){
//get groups
$groups = JUserHelper::getUserGroups($me->id);
//check if current user object has right groups
if($me->groups != $groups){
//if not update groups and clear session access levels
$me->groups = $groups;
$me->set('_authLevels', null);
}
}
希望它能有所帮助。作者已经半途而废地解决了这个问题,所以这个答案可能会对其他人有所帮助。我用Eclipse和XDebug调试了几个小时才发现问题。这个错误非常棘手,因为addUserToGroup对我来说返回true,并且用户对象在成功更改后也返回true,但它们并没有保存在数据库中。问题是,每当addUserToGroup试图保存用户时,插件中的OnUserForesSave方法就会引发异常。因此,如果您触碰了OnUserPreSave,请检查它的实现。如果没有,您必须使用XDebug安装Eclipse,并尝试调试您的确切问题 我还在想办法。不是用户id吗?你查过我告诉你的那张桌子了吗?是的,我查过了,每件事都完全正确。数据库中没有任何内容,用户和组ID都是正确的。我将更新答案以帮助您进行调试。试试看,让我知道:所以在添加组之前和之后转储$user变量,在之前,它说我在注册组和来宾组中。之后,我加入了这些人和我想加入的团体。因此,出于某种原因,它没有正确地保存它。需要注意的一点是,当这个脚本运行时,用户没有登录,这是来自PayPal的回调,用于处理他们的购买。是的,我现在的问题是处理登录用户。它在数据库中正确更新,但当前登录的用户必须重新登录才能应用更改。我创建了你建议的插件,可惜它不起作用。你介意在某处发布插件的完整下载,看看我是否做错了什么吗?如果您使用的是Joomla 3.0,我也在使用它。我在onAfterInitialise函数中添加了一个echo,它会被调用。问题仍然是用户组没有更新。很抱歉我的回复太晚,我是stackoverflow帐户的新手,我想当有人评论我的答案时我会收到一封电子邮件,但我没有。你有没有检查插件在$me->groups中是否有任何变化?插件检查$groups时出错了吗?