2012-05-06 3 views
9

Sto scrivendo un componente di Joomla 2.5 che stavo sviluppando in Joomla 1.7. Sto usando un codice come questo:Come ottenere nomi di gruppo utenti in Joomla 2.5

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

L'array $ groups conterrebbe un elenco di ID con il nome del gruppo come indice. Joomla 2.5 sembra aver eliminato questa funzionalità. Non sono stato in grado di scoprire come ottenere i nomi dei gruppi senza interrogare direttamente il database. Esiste un metodo per ottenere un elenco dei gruppi di cui un utente è membro senza dover ricorrere a query sul database?

risposta

4

Sì, questo changed.

Ma che cosa si dovrebbe utilizzare invece è:

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

o semplicemente getUserGroups

+7

Per tutti questi casi, ho trovato che il array restituito ha la forma: ([0] => '1', [1] => '2'). Non contengono i nomi dei gruppi. – nsimon

+1

Purtroppo non possono contenere il nome perché non è vincolato ad essere unico. – Elin

1

Eccolo:

<?php 

    $user =& JFactory::getUser(); 

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

?> 

Questo stamperà tutti i nomi dei gruppi utente alla schermata. I nomi dei gruppi di utenti sono le "chiavi" dell'array $ user-> groups.

+0

Questo stampa gli id ​​dei gruppi, non i nomi. –

8

Il codice ho generato sotto ottiene i nomi di tutti i gruppi che l'utente è una parte di e li memorizza nella variabile $ nomi di gruppo separati da interruzioni di riga:

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; 

interroga tecnicamente il database, ma è fatto tramite l'API Joomla. Funziona bene per me su Joomla 2.5.

1

reale frammento:

  $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

Lei ha detto "ho trovato che la matrice restituita è della forma: ([0] => '1', [1] => '2') "

Per risolvere il problema è necessario includere falso come illustrato di seguito. Si noti che 43 è l'ID utente.

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

Informazioni più dettagliate sono disponibili all'indirizzo http://forum.joomla.org/viewtopic.php?t=530721

Per inciso, se siete interessati ad uno StackOverflow come QnA per Joomla si prega di sostenere http://area51.stackexchange.com/proposals/58842/joomla

+0

Stampa gli id ​​dei gruppi, non i nomi. –