【问题标题】:How to Get User Group Names in Joomla 2.5如何在 Joomla 2.5 中获取用户组名称
【发布时间】:2012-05-15 03:16:34
【问题描述】:

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

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

$groups 数组将包含一个以组名作为索引的 id 列表。 Joomla 2.5 似乎已经废弃了这个功能。如果不直接查询数据库,我无法找出如何获取组名。有没有什么方法可以获取用户所属的组列表,而不必求助于查询数据库?

【问题讨论】:

    标签: joomla joomla2.5


    【解决方案1】:

    我在下面生成的代码获取用户所属的所有组的名称,并将它们存储在由换行符分隔的变量 $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】:

    真正的sn-p:

                $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,我同意这在数据库查询方面未优化,但是,无论 Joomla 版本如何,嵌入现有代码时都更容易调试。组总是很少,但不同Joomla版本的表结构不同。或者您的任务是否包含大量引发此讨论的用户组?
    • 我个人不需要这个解决方案。我吹口哨说这个答案没有使用最直接的技术来生成所需的输出。这是我提供的一项免费服务,可以帮助不知情的研究人员区分好的答案和不太好的答案,因为有时投票结果会说谎。
    • @mickmackusa,同意,但由于我之前提到的原因,这是一个非常灵活的答案。这不是您需要帮助的情况。但是,感谢这样的 cmets。他们真的很有帮助。
    【解决方案3】:

    这里是:

    <?php
    
        $user =& JFactory::getUser();
    
        foreach ($user->groups as $key => $value){
            echo $key.'<br>';
        }
    
    ?>
    

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

    【讨论】:

    • 打印组 ID,而不是名称。
    【解决方案4】:

    是的,这个changed

    但你应该使用的是:

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

    或者只是getUserGroups

    【讨论】:

    • 对于所有这些情况,我发现返回的数组格式为:([0] => '1', [1] => '2')。它们不包含组名。
    • 遗憾的是,它们不能包含名称,因为它不限于唯一。
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2013-10-29
    • 2012-12-20
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 2012-10-02
    相关资源
    最近更新 更多