Wie liste ich Mitgliedsunternehmen einer Organic Group programmatisch auf?

17

Wie kann ich programmgesteuert eine Liste der Mitgliedsunternehmen einer Organic Group abrufen?

(Ich weiß, wie ich mithilfe von Ansichten eine Liste der Gruppenmitglieder erhalte. Ich würde dies lieber mit der API für organische Gruppen tun, konnte jedoch nicht die richtige Methode finden.)

Smokris
quelle

Antworten:

14

Verwenden Sie direkt die Organic Groups API:

og_get_group_members_properties($yourGroupNode, array(), 'members', 'node');

gibt Ihnen eine Reihe von Benutzer-IDs.

Um nur aktive, ausstehende oder blockierte Benutzer zu erhalten, können Sie 'members__1', 'members__2' oder 'members__3' anstelle von 'members' einfügen, wie im folgenden Beispiel dargestellt:

og_get_group_members_properties($yourGroupNode, array(), 'members__1', 'node');

von, wenn Sie es vorziehen, wie dieses:

og_get_group_members_properties($yourGroupNode, array(), 'members__' . OG_STATE_ACTIVE, 'node');

Beispiel für den zurückgegebenen Wert:

Array
(
    [0] => 48
    [1] => 49
    [2] => 51
)
Mitja
quelle
1
Dies sollte die richtige Antwort sein
Chris
11

Oder über DBTNG:

$query = db_select("og_membership", "ogm");
$query->condition("ogm.gid", $yourGroupID, "=");
$query->condition("ogm.group_type", "node", "=");
$query->fields("ogm", array("entity_type", "etid"));
$result = $query->execute();
print_r($result->fetchAll());

... wodurch Sie andere Tabellen verknüpfen können, anstatt die Ergebnismenge im PHP-Code wie bei Verwendung filtern zu müssen EntityFieldQuery.

Smokris
quelle
2

smokris solution hat funktioniert, aber ich habe einen anderen Weg gefunden mit EntityFieldQuery:

$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
  ->fieldCondition('og_group_ref', 'target_id', $yourGroupID)
  ->execute();

Beispiel für den zurückgegebenen Wert:

{"node":
  {"22":{"nid":"22","vid":"22","type":"panoramique"},
   "32":{"nid":"32","vid":"32","type":"panoramique"},
   "35":{"nid":"35","vid":"35","type":"panoramique"},
   "36":{"nid":"36","vid":"36","type":"panoramique"}
  }
}
Thithi32
quelle
0

Antwort von @smokris wird erweitert .

Der aktive Status für die Mitgliedschaften ist "1" ( ->condition('ogm.state', 1, '=')).

function _get_users_in_group($gid) {
  $query = db_select('users', 'u');

  $query
    ->condition('u.uid', 0, '<>')
    ->condition('u.status', 1, '=')
    ->condition('ogm.state', 1, '=')
    ->fields('u', array('uid', 'name'))
    ->join('og_membership', 'ogm', "ogm.gid = :gid AND u.uid = ogm.etid AND ogm.entity_type = 'user'", array(':gid' => $gid));
  return $query->execute();
}
Rubofvil
quelle