我正在编写一个Joomla 2.5组件,该组件之前是在Joomla 1.7中开发的。我一直在使用像这样的代码:
$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;
真实代码片段:
$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);
$user->groups
,只需要将其移动到查询中。这种改进方式不会降低代码片段的灵活性,而是提高了代码效率。请编辑您的答案,在最早的步骤中优化过滤步骤,并添加教育性的解释,说明您所建议的代码如何工作以及为什么您认为这是一个好建议。如果拒绝这样做,将意味着较少的研究人员将获得帮助和/或研究人员将复制粘贴次优代码。 - mickmackusa这是它:
<?php
$user =& JFactory::getUser();
foreach ($user->groups as $key => $value){
echo $key.'<br>';
}
?>
这将把所有用户组名称打印到屏幕上。 用户组名称是数组 $user->groups 的“键”。