我正在编写一个我在Joomla 1.7中开发的Joomla 2.5组件。我一直在使用这样的代码:
$user = JFactory::getUser();
$groups = $user->get('groups');
$ groups数组将包含一个id列表,其中组名作为索引。 Joomla 2.5似乎已经废弃了这个功能。我一直无法在不直接查询数据库的情况下找到如何获取组名。是否有任何方法可以获取用户所属的组列表而无需求助于查询数据库?
答案 0 :(得分:8)
我在下面生成的代码获取了用户所属的所有组的名称,并将它们存储在由换行符分隔的变量 $ groupNames 中:
foreach ($user->groups as $groupId => $value){
$db = JFactory::getDbo();
$db->setQuery(
'SELECT `title`' .
' FROM `#__usergroups`' .
' WHERE `id` = '. (int) $groupId
);
$groupNames .= $db->loadResult();
$groupNames .= '<br/>';
}
print $groupNames;
它从技术上查询数据库,但是通过Joomla API完成。这对Joomla 2.5来说非常有用。
答案 1 :(得分:4)
答案 2 :(得分:2)
你说“我发现返回的数组是这样的形式:([0] =&gt;'1',[1] =&GT; '2')“
要解决此问题,您需要包含false,如下所示。请注意,43是用户ID。
jimport( 'joomla.access.access' );
$groups = JAccess::getGroupsByUser(43, false);
print_r($groups);
更详细的信息可以在http://forum.joomla.org/viewtopic.php?t=530721
找到顺便提一下,如果您对像Joomla的QnA这样的堆栈溢出感兴趣,请支持http://area51.stackexchange.com/proposals/58842/joomla
答案 3 :(得分:1)
这是:
<?php
$user =& JFactory::getUser();
foreach ($user->groups as $key => $value){
echo $key.'<br>';
}
?>
这会将所有用户组名称打印到屏幕上。用户组名称是数组$ user-&gt; groups的“键”。
答案 4 :(得分:1)
Real snippet:
$user = JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery($db->getQuery(true)
->select('*')
->from("#__usergroups")
);
$groups=$db->loadRowList();
$userGroups = $user->groups;
$return=array();
foreach ($groups as $key=>$g){
if (array_key_exists($g[0],$userGroups)) array_push($return,$g[4]);
}
$groups=$return;
/////printing groupnames for current user/////////////
print_r($groups);