2012-05-06 16 views
9

Escribo un componente de Joomla 2.5 que desarrollé en Joomla 1.7. He estado usando un código como este:Cómo obtener nombres de grupos de usuarios en Joomla 2.5

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

La matriz $ groups contendría una lista de identificadores con el nombre del grupo como índice. Joomla 2.5 parece haber eliminado esta funcionalidad. No he podido averiguar cómo obtener los nombres de los grupos sin consultar directamente la base de datos. ¿Hay algún método para obtener una lista de los grupos de los que un usuario es miembro sin tener que recurrir a consultar la base de datos?

Respuesta

4

Sí, esto changed.

Pero lo que usted debe utilizar en su lugar es:

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

o simplemente getUserGroups

+7

Para todos estos casos, he encontrado que la la matriz devuelta tiene la forma: ([0] => '1', [1] => '2'). No contienen los nombres de grupo. – nsimon

+1

Lamentablemente no pueden contener el nombre porque no está limitado a ser único. – Elin

1

Aquí está:

<?php 

    $user =& JFactory::getUser(); 

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

?> 

Esto imprimirá todos los nombres de los grupos de usuario a la pantalla. Los nombres de los grupos de usuarios son las "claves" de la matriz $ usuario-> grupos.

+0

que imprime los ID de grupos, no los nombres. –

8

El código que se genera a continuación obtiene los nombres de todos los grupos el usuario es una parte y los almacena en la variable $ nombres de grupo separados por saltos de línea:

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; 

Es técnicamente consultas de la base de datos, pero se realiza a través de la API de Joomla. Esto está funcionando bien para mí en Joomla 2.5.

1

real fragmento:

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

Dijiste "He encontrado que la matriz devuelta es de la forma: ([0] => '1', [1] => '2') "

Para solucionar esto, debe incluir el falso como se muestra a continuación. Tenga en cuenta que 43 es el ID de usuario.

jimport('joomla.access.access'); 
$groups = JAccess::getGroupsByUser(43, false); 
print_r($groups); 

información más detallada se puede encontrar en http://forum.joomla.org/viewtopic.php?t=530721

Por cierto, si usted está interesado en un stackoverflow como QnA para Joomla Por favor apoye http://area51.stackexchange.com/proposals/58842/joomla

+0

que imprime los identificadores de grupo, no los nombres. –

Cuestiones relacionadas