2012-05-06 29 views
9

Tôi đang viết một thành phần Joomla 2.5 mà tôi đã phát triển trong Joomla 1.7. Tôi đã sử dụng mã như sau:Cách lấy tên nhóm người dùng trong Joomla 2.5

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

Mảng $ nhóm sẽ chứa danh sách các id có tên nhóm làm chỉ mục. Joomla 2.5 dường như đã loại bỏ chức năng này. Tôi đã không thể tìm hiểu làm thế nào để có được tên nhóm mà không trực tiếp truy vấn cơ sở dữ liệu. Có phương pháp nào để nhận danh sách các nhóm mà người dùng là thành viên không cần phải sử dụng để truy vấn cơ sở dữ liệu không?

Trả lời

4

Có, điều này changed.

Nhưng những gì bạn nên sử dụng thay thế là:

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

hoặc chỉ getUserGroups

+7

Đối với tất cả các trường hợp này, tôi đã phát hiện ra rằng mảng được trả về có dạng: ([0] => '1', [1] => '2'). Chúng không chứa tên nhóm. – nsimon

+1

Đáng buồn là họ không thể chứa tên vì nó không bị ràng buộc là duy nhất. – Elin

1

Ở đây là:

<?php 

    $user =& JFactory::getUser(); 

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

?> 

này sẽ in tất cả các tên nhóm người dùng đến màn hình. Tên nhóm người dùng là "khóa" của mảng $ user-> groups.

+0

Điều đó in các id nhóm, không phải là tên. –

8

Code tôi tạo dưới đây được tên của tất cả các nhóm người dùng là một phần của và lưu trữ chúng trong biến $ groupNames phân cách bằng ngắt dòng:

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; 

Nó về mặt kỹ thuật truy vấn cơ sở dữ liệu nhưng được thực hiện thông qua API Joomla. Điều này làm việc tốt cho tôi trên Joomla 2.5.

1

Bất đoạn:

  $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

Bạn nói: "Tôi đã tìm thấy rằng mảng được trả về có dạng: ([0] => '1', [1] => '2') "

Để khắc phục điều đó, bạn cần bao gồm sai như minh họa bên dưới. Lưu ý rằng 43 là userid.

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

Thông tin chi tiết có thể được tìm thấy tại http://forum.joomla.org/viewtopic.php?t=530721

Ngẫu nhiên, nếu bạn quan tâm đến một stackoverflow như QnA cho Joomla hãy ủng hộ http://area51.stackexchange.com/proposals/58842/joomla

+0

Điều đó in các id nhóm, không phải là tên. –

Các vấn đề liên quan