2014-09-23 2 views
3

Я использую RSform в Joomla для создания формы для ввода данных. У формы есть выпадающий список, чтобы выбрать пользователя, и это поле получает его данные, используя следующий код в форме.Фильтр по группе пользователей в 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; 
} 

Это будет просто показать все USERNAME: от пользователя, которые принадлежат к $groupID, который Curre ntly установить на , и вы можете изменить это соответственно.

Так что ваш окончательный и полный код будет таким:

$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

+0

Это сработало отлично, спасибо всем за быструю и полезную помощь :) – mnunan

+0

Вы более чем рады. Рад помочь! – Lodder

0

пользователь отображение на user_group хранится в #__user_usergroup_map таблице.

Так что для того, чтобы получить все идентификаторы пользователей, которые существуют в группе, вы должны выполнить следующие 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

+0

Вы должны поместить этот код над своим запросом, а результат ** foreach ** запустит ваш запрос с предоставленным «user_id» или попробуйте внутреннее соединение таблиц. – emmanuel

Смежные вопросы