userreference in einer og
am 18.08.2009 - 12:05 Uhr in
Hallo,
ich möchte für ein Userreference-Field (Select-List) eine view erstellen, die mir nur die User listet, die in der OG Member sind, in der der Node gerade erstellt wird.
Welche Filter/Relations/Arguments muß ich dazu verwenden?
Danke.
Grüße
Axel
- Anmelden oder Registrieren um Kommentare zu schreiben

Hey Axel - das ist an sich
am 18.08.2009 - 18:02 Uhr
Hey Axel - das ist an sich nicht möglich, da das Benutzerreferenz-Feld für den benutzten View nur feste Argumente nimmt - also z.B. "1" für die OG mit der NID 1. Somit könntest du nur User aus EINER OG nehmen, nicht aber dasselbe Konzept in mehreren OG anwenden.
Ich habe mir einen Umweg gebaut. Im Inhaltstyp der Node, in der ich nur diese User listen will, habe ich ein Textfeld namens ognumber hinzugefügt, das ich mit Hilfe von formfilter ausblende. Dieses Textfeld lasse ich wiederum mit Hilfe von prepopulate mit einem Wert ausfüllen - der NID der Organic Group. Damit kannst du schon nicht mehr mit dem Standardmenü von OG arbeiten, da dort ja einfach "node/add/deininhaltstyp" steht, du aber eine angepasste URL brauchst, in etwa so: "node/add/deininhaltstyp?edit[field_ognumber][0][value]=42" - die 42 ist die OG Node ID. Erstellen kannst du diesen Link mit ein bisschen php, zum Beispiel in einem Block (ich habe es im Kopf eines Views), der Code sollte in etwa so aussehen:
<?phpglobal $user;
if (
module_exists('og')) {$group_node = og_get_group_context();
$gid02 = $group_node->nid;
$gid = (int)$gid02;
if ($gid02 === null) $gid = 0;
$output .= '<a href="/node/add/deininhaltstyp?edit[field_ognumber][0][value]='. $gid .'">Neuer Deininhaltstyp</a>';print
$output;}
?>
Da du das Feld mit formfilter ausblendest, wird es nie einen Benutzer stören. Das Wichtigste fehlt ja aber noch, du möchtest ja den View für dein Argument auswählen. In diesem View brauchst du das Argument: "Organische Gruppen: Gruppe". Das allein reicht aber nicht, da das Argument nicht zur Verfügung steht beim Erstellen von Inhalt. Also musst du innerhalb dieses Arguments folgendes einstellen: "Die auszuführende Aktion, wenn das Argument nicht vorhanden ist: Standardargument zu Verfügung stellen" und "Standardtyp für Argumente: PHP-Code". Der dort einzutragende Code (ohne php-tags!):
if (isset($_GET['edit']['field_ognumber'][0]['value'])) {return $_GET['edit']['field_ognumber'][0]['value'];
}
else if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(array('nid' => arg(1)));
return $node->field_ognumber[0]['value'];
}
return FALSE;
Hier ein Screenshot für besseres Verständnis:

Denk dran, statt "ognumber" den Namen deines Feldes zu nehmen, falls du es anders benannt hast. In deinem Benutzerreferenz-Feld wählst du nun nur den Namen des Views aus und lässt das Argumente-Feld frei.
Viel Spaß beim Basteln ;-)
Anja
---
http://www.twitter.com/aschiwi