在 RSform 中按用户组筛选


Filter by user group in RSform

我在Joomla中使用RSform创建一个表单来输入数据。表单有一个用于选择用户的下拉列表,该字段使用表单中的以下代码获取数据。

我想做的是让列表仅显示特定用户组中的用户名称。实际用户存储在表中,#__users具有唯一ID称为id,组存储在表#__usergroups中,唯一ID也称为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;
您需要将

用户映射到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;
}

这将仅显示属于当前设置为 2$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;

映射到user_group的用户存储在#__user_usergroup_map表中。

因此,为了获取组中存在的所有用户 ID,您必须运行以下查询:

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

希望这有帮助