我已将多个用户分组并创建了一个只能由这些组访问的页面。
虽然我了解有一些解决方案可以建议$ user-> guest来确定用户状态,但它只会打印出除Guest之外的其他角色的所有用户。
因此我研究并发现我们可以用会话表来反击检查。
以下是我的代码:
<?php
$registeredUsers = JAccess::getUsersByGroup(11);
jimport('joomla.access.access');
jimport('joomla.user.user');
$db = JFactory::getDBO();
$query = 'SELECT COUNT(userid) FROM #__session AS s WHERE s.userid = ' (int)$userid;
$db->setQuery($query);
$loggedin = $db->loadResult();
foreach($registeredUsers as $user_id) {
$user = JFactory::getUser($user_id);
if($loggedin) {
echo $user->name."; ";
}
}
?>
不幸的是,它也会返回所有用户。
任何人都在乎看看这个吗?
答案 0 :(得分:2)
@emmanuel感谢你的开端。在玩了几个小时的代码后,我设法找到了完整的解决方案。
$registeredUsers = JAccess::getUsersByGroup(11);
$registeredUsersex = implode(" ",$registeredUsers);
if(!empty($registeredUsers)){
$db = JFactory::getDBO();
$query = 'SELECT username FROM #__session AS s WHERE s.userid IN ( ' . implode(',', $registeredUsers) . ' )';
$db->setQuery($query);
$db->setQuery($query);
$loggedin_users = $db->loadRowList();
print_r(array_values($loggedin_users));
}
?>
答案 1 :(得分:1)
getUsersByGroup
方法返回组中包含的用户ID数组。 Please refer here (for j2.5 version)
因此,如果使用MySQL IN和php explode函数在此数组中存在userid,则必须检查您的查询。
我还没有测试过,但结果必须是这样的:
<?php
$registeredUsers = JAccess::getUsersByGroup(11);
jimport('joomla.access.access');
jimport('joomla.user.user');
if(!empty($registeredUsers)){
$db = JFactory::getDBO();
$query = 'SELECT userid FROM #__session AS s WHERE s.userid IN ( ' . explode(',', $registeredUsers) . ' )';
$db->setQuery($query);
$loggedin_users = $db->loadObjectList();
foreach($loggedin_users as $user_id){
$user = JFactory::getUser($user_id->userid);
echo $user->name."; ";
}
}
?>