web-dev-qa-db-fra.com

Comment créer une boucle Foreach qui renvoie des utilisateurs dans un groupe d'utilisateurs spécifique

Mon objectif est de créer une boîte de sélection html via une boucle foreach qui renvoie tous les utilisateurs appartenant à un groupe d'utilisateurs personnalisé spécifique (par exemple, usergroup = Agents).

Une fois, la requête extrait tous les enregistrements (utilisateurs) de ce groupe d'utilisateurs spécifique, puis je dois extraire les données de plusieurs tables pour chaque utilisateur, telles que: #__users et #__user_profiles - car je souhaite récupérer des informations sur #__user telles que en tant que: nom et email, tout en récupérant des informations sur le profil de l'utilisateur, telles que: adresse1, ville, code postal, etc….

Toute aide serait appréciée….

pseudo-code pour ce dont je pense avoir besoin

SELECT *
  FROM #__users AND #__user_profiles
  WHERE #__usergroup.title = Agent
  ORDER BY #__users.name ASC;

<select>
FOREACH user that has a #__usergroup.title = Agent
  <option>
  OUTPUT (
    #__users.name,
    #__users.email
    #__users.usertype,
    #__user_profiles.address1,
    #__user_profiles.city,
    #__user_profiles.postal_code,
    #__user_profiles.phone,
    #__user_profiles.website
  );
  </option>
END FOREACH
</select>
1
Corey

Pour répondre à la question, ce code vous donnera une liste déroulante d’ID d’utilisateur et de noms. La récupération de toutes les données supplémentaires serait alors simplement une instruction SQL select

$myGroupID = 2;  //Your User Group to list
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('a.id as value, a.name as text');
$query->from($db->quoteName('#__users').' as a');
$query->join('INNER', '#__user_usergroup_map as b ON b.user_id=a.id AND b.group_id='.$myGroupID);
$query->order('a.name');
$db->setQuery($query);
$MyUsers = $db->loadObjectList();
$mt = new stdClass();
$mt->value = '';
$mt->text = 'Select the User Profile';
array_unshift($MyUsers, $mt);
echo JHtml::_('select.genericlist', $MyUsers, 'MyListboxName', 'title="Select from My List"', 'value', 'text');

Avec l'ID sélectionné dans la liste, utilisez ce SQL pour obtenir les données de profil:

SELECT a.*,b.* 
FROM j32_users AS a
JOIN j32_user_profiles AS b ON b.user_id=a.id
WHERE a.id = "selected ID"
3
GDP

Vous devez rechercher le numéro d'identification correspondant au groupe "Agent" ou inclure la table #__usergroups dans votre requête.

puis, pour chaque utilisateur, si le groupe est égal à "agent" (ou quel que soit son numéro, si vous n'incluez pas la table des groupes d'utilisateurs), renvoyez le nom, l'adresse électronique, etc.

J'espère que ça t'as aidé. Je peux me tromper car cela fait longtemps, mais cela a fonctionné pour moi dans le passé.

0
Hocho