我正在编写一个我在 Joomla 1.7 中开发的 Joomla 2.5 组件。我一直在使用这样的代码:
$user = JFactory::getUser();
$groups = $user->get('groups');
$groups 数组将包含一个以组名作为索引的 id 列表。Joomla 2.5 似乎已经废弃了这个功能。如果不直接查询数据库,我一直无法找出如何获取组名。是否有任何方法可以获取用户所属的组列表,而无需求助于查询数据库?
我在下面生成的代码获取用户所属的所有组的名称,并将它们存储在由换行符分隔的变量$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 上运行良好。
真实片段:
$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);
这里是:
<?php
$user =& JFactory::getUser();
foreach ($user->groups as $key => $value){
echo $key.'<br>';
}
?>
这会将所有用户组名称打印到屏幕上。用户组名称是数组 $user->groups 的“键”。