it-swarm.com.de

So erstellen Sie eine Foreach-Schleife, die Benutzer in einer bestimmten Benutzergruppe zurückgibt

Mein Ziel ist es, ein HTML-Auswahlfeld über eine foreach-Schleife zu erstellen, das alle Benutzer in einer bestimmten benutzerdefinierten Benutzergruppe zurückgibt (z. B. usergroup = Agents).

Sobald die Abfrage alle Datensätze (Benutzer) für diese bestimmte Benutzergruppe abruft, muss ich für jeden Benutzer Daten aus mehreren Tabellen abrufen, beispielsweise: #__users und #__user_profiles - da ich #__user-Informationen abrufen möchte, z as: Name und E-Mail-Adresse, wobei auch Informationen zu #__user_profile abgerufen werden, z. B. Adresse1, Stadt, Postleitzahl usw.

Jede Hilfe wäre dankbar ...

Pseudocode für das, was ich für nötig halte

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

Um die eigentliche Frage zu beantworten, erhalten Sie mit diesem Code eine Liste mit Benutzer-IDs und Namen. Das Abrufen aller zusätzlichen Daten wäre dann nur eine SQL-Select-Anweisung

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

Verwenden Sie mit der ausgewählten ID aus der Liste diese SQL, um die Profildaten abzurufen:

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

Sie müssten nach der entsprechenden ID-Nummer suchen, die mit der Gruppe "Agent" geliefert wird, oder die Tabelle #__usergroups in Ihre Abfrage aufnehmen.

geben Sie dann für jeden Benutzer den Namen, die E - Mail usw. zurück, wenn die Gruppe gleich "Agent" ist (oder eine beliebige Anzahl, wenn Sie die Benutzergruppentabelle nicht einschließen)

Hoffentlich hilft das. Ich könnte mich etwas irren, wie es eine Weile her ist, aber das hat in der Vergangenheit für mich funktioniert.

0
Hocho