如何在Joomla 2.5中获取用户组名称

9

我正在编写一个Joomla 2.5组件,该组件之前是在Joomla 1.7中开发的。我一直在使用像这样的代码:

$user = JFactory::getUser();
$groups = $user->get('groups');

$groups数组将包含一个id列表,其中组名为索引。Joomla 2.5似乎取消了这个功能。我一直无法找到如何在不直接查询数据库的情况下获取组名称的方法。是否有一种方法可以获取用户是成员的组列表而不必诉诸于查询数据库?

4个回答

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上运行良好。

2
在循环中执行任何数据库查询都不是一个好主意。 - SkipIntro

4

是的,这个有所改变

但你应该使用的是:

JFactory::getUser()->getAuthorisedGroups();

或者只需使用getUserGroups函数。

7
对于所有这些情况,我发现返回的数组形式为:([0] => '1',[1] => '2')。它们不包含组名。 - nsimon
1
很遗憾,它们无法包含名称,因为名称不受唯一性约束。 - Elin

1

真实代码片段:

            $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);

  1. 这个答案缺少教育性的解释。
  2. 我不明白为什么你不在查询中应用过滤逻辑;抓取太多的结果集然后用php来削减它似乎不是专业级别的建议。
- mickmackusa
它能够工作只是发布一个有助于研究人员的好答案的开始。当你有时间时,这个答案仍然需要编辑。 - mickmackusa
@mickmackusa,我同意这在数据库查询方面不够优化,但是,无论Joomla版本如何,将其嵌入现有代码中进行调试更容易。虽然用户组始终存在,但在不同的Joomla版本中表结构是不同的。或者你的任务包含大量用户组,引起了这个讨论? - xmoonlight
我个人不需要这个解决方案。 我正在吹哨,指出此答案没有使用最直接的技术来生成所需的输出。 这是我提供的免费服务,帮助不知情的研究人员区分好的答案和不那么好的答案,因为有时投票统计数据会撒谎。 - mickmackusa
你已经在使用 $user->groups,只需要将其移动到查询中。这种改进方式不会降低代码片段的灵活性,而是提高了代码效率。请编辑您的答案,在最早的步骤中优化过滤步骤,并添加教育性的解释,说明您所建议的代码如何工作以及为什么您认为这是一个好建议。如果拒绝这样做,将意味着较少的研究人员将获得帮助和/或研究人员将复制粘贴次优代码。 - mickmackusa
显示剩余2条评论

0

这是它:

<?php

    $user =& JFactory::getUser();

    foreach ($user->groups as $key => $value){
        echo $key.'<br>';
    }

?>

这将把所有用户组名称打印到屏幕上。 用户组名称是数组 $user->groups 的“键”。


那会打印出组的ID,而不是名称。 - Leopoldo Sanczyk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接