2014-09-23 31 views
3

我在Joomla中使用RSform創建表單來輸入數據。表單有一個下拉菜單來選擇用戶,並且該字段使用表單中的以下代碼獲取數據。按照RSform中的用戶組過濾

我想要做的是讓列表只顯示特定用戶組中的用戶名稱。 實際用戶存儲在表#__users中,其唯一標識爲id,這些組存儲在表#__usergroups中,唯一標識也被稱爲id。我希望能夠過濾列表以僅顯示用戶組2中的那些用戶。

任何人都可以幫忙嗎?

預先感謝

// Prepare the empty array 
$items = array(); 
// Prepare the database connection 
$db = JFactory::getDbo(); 
// Keep this if you'd like a "Please select" option, otherwise comment or remove it 
$items[] = "|Please Select[c]"; 

// Run the SQL query and store it in $results 
$db->setQuery("SELECT id, name, email FROM #__users"); 
$results = $db->loadObjectList(); 

// Now, we need to convert the results into a readable RSForm! Pro format. 
// The Items field will accept values in this format: 
// value-to-be-stored|value-to-be-shown 
// Eg. m|M-sized T-shirt 
foreach ($results as $result) { 
    $value = $result->name; 
    $label = $result->name; 
    $items[] = $value.'|'.$label; 
} 

// Multiple values are separated by new lines, so we need to do this now 
$items = implode("\n", $items); 

// Now we need to return the value to the field 
return $items; 

回答

0

您將需要與usergroup_map表中的用戶映射像這樣:

$groupID = 2; 
$db = JFactory::getDbo(); 

$query = $db->getQuery(true); 
$query->select('a.*') 
     ->from($db->quoteName('#__users') . ' AS a') 
     ->join('LEFT', $db->quoteName('#__user_usergroup_map') . 'AS map2 ON map2.user_id = a.id') 
     ->group($db->quoteName(array('a.id', 'a.username'))) 
     ->where('map2.group_id = ' . (int) $groupID); 
$db->setQuery($query); 
$results = $db->loadObjectList(); 

foreach($results as $result) { 
    echo $results->username; 
} 

這將只顯示用戶的所有用戶名的屬於$groupID這是真正水流請將其設置爲,然後您可以相應地更改此設置。

所以你的最終完全代碼將是這樣的:

$items = array(); 
$groupID = 2; 
$db = JFactory::getDbo(); 

$query = $db->getQuery(true); 
$query->select('a.*') 
     ->from($db->quoteName('#__users') . ' AS a') 
     ->join('LEFT', $db->quoteName('#__user_usergroup_map') . 'AS map2 ON map2.user_id = a.id') 
     ->group($db->quoteName(array('a.id', 'a.username'))) 
     ->where('map2.group_id = ' . (int) $groupID);  
$db->setQuery($query); 
$results = $db->loadObjectList(); 

$items[] = "|Please Select[c]"; 

foreach ($results as $result) { 
    $value = $result->username; 
    $label = $result->username; 
    $items[] = $value.'|'.$label; 
} 

$items = implode("\n", $items); 

return $items; 
+0

這太好了我會放棄它,非常感謝:) – mnunan 2014-09-23 13:05:46

+0

這工作完美,感謝大家的快速和偉大的幫助:) – mnunan 2014-09-23 13:09:34

+0

你更歡迎。很高興幫助:) – Lodder 2014-09-23 13:09:58

0

用戶映射到USER_GROUP存儲在#__user_usergroup_map表。

因此,爲了獲得存在一個組中的所有用戶ID,你必須運行以下query

$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 

$user_group_id = 8; // user group id 

$query->select($db->quoteName(array('user_id'))); 
$query->from($db->quoteName('#__user_usergroup_map')); 
$query->where($db->quoteName('group_id') . ' = ' . $user_group_id); 
$db->setQuery($query); 

$results = $db->loadObjectList(); 

希望這有助於

+0

感謝您的快速反應:),對不起,我不是偉大的PHP或MySQL,我將如何納入這個代碼在我的第一篇文章? – mnunan 2014-09-23 12:14:11

+0

您必須將此代碼放在您的查詢之上並且** foreach **結果通過提供的'user_id'運行您的查詢或嘗試表的內部連接。 – emmanuel 2014-09-23 12:31:10