In Gruppen eine User-Struktur abbilden
am 22.06.2009 - 13:38 Uhr in
Hallo,
ich möchte, dass Gruppen-Ersteller (Organic Groups) die Möglichkeit haben eine User-Struktur zu erstellen, wo alle User die der Gruppe anghören, eingeordnet werden können. Dabei soll der Name und die Anzahl der Untergruppen frei definierbar sein.
Beispiel:
Test-Gruppe:
|-> User
|-> User
|-> Untergruppe 1
|-> User
|-> User
|-> User
|-> Untergruppe 2
|-> User
|-> User
Ich habe recherchiert, und dabei mehrere Ansätze gefunden:
- Node-Hierarchy (Die Untergruppen brauchen nicht unbedingt eine eigene Node)
- Book (zu komplex, da max. eine Ebene reicht.)
- og_subgroups (auf dem Buch-Modul aufgebaut. Leider unausgereift)
- Taxonomy (weiß nicht, ob sowas sinnvoll ist?!?)
- ??? (irgendein anderes Modul, dass diese Aufgabe lösen kann?)
Welches ist das richtige Modul für die Aufgabe? Und wie wäre dabei die Vorgehensweise?
- Anmelden oder Registrieren um Kommentare zu schreiben
ich mache sowas ähnliches
am 22.06.2009 - 14:19 Uhr
ich mache sowas ähnliches mit organic groups und darin dann mit node und user reference feldern. dann kannst du mit views die untergruppen listen und darin deren user. ist nicht so ganz dasselbe, sieht aber von oben genauso aus. was aber nicht so einfach geht, ist in den untergruppen beliebig untergruppen erstellen.
undpaul
Longevity Insights from Top Health Podcasts
Der Ansatz hat mir sehr
am 23.06.2009 - 20:56 Uhr
Der Ansatz hat mir sehr geholfen! Danke!
Nun habe ich jedoch noch ein Problem: Das Benutzerreferenz-Feld möchte ich über Views steuern. Da man nur Benutzer auswählen können soll die der Hauptgruppe angehören, habe ich mir überlegt ein Argument zu übergeben. Wenn ich eine Gruppen-ID (z.B. 5) eingebe klappt es. Jedoch soll das ja dynamisch funktionieren. Je nachdem in welcher Gruppe man sich grad befindet. %1 oder so funktioniert da nicht. PHP-Code leider auch nicht.
Das Bild zeigt, wo ich versucht habe das Argument einzutragen (drupal/admin/content/node-type/gruppe/fields/field_benutzer):
Versuch es mal ohne Argument
am 24.06.2009 - 07:55 Uhr
Versuch es mal ohne Argument (bzw. brauchst du eigentlich nur das Argument aus "Inhalt - dein Node Reference Feld") und stattdessen mit Filter (auch wieder "Inhalt: dein User Referenz Feld)
:-)
***edit
Ach so, ich glaub du willst was anderes - das wollte ich auch machen und habe dabei herausgefunden, dass man dort in dem Feld keine dynamischen Argumente benutzen kann, man kann nur eine feste Gruppe auswählen :-(
undpaul
Longevity Insights from Top Health Podcasts
warum erzeugst Du nicht
am 24.06.2009 - 12:37 Uhr
warum erzeugst Du nicht einfach einen View wo Du alle Benutzer und die Gruppen anzeigen lässt. Dort wählst Du dann als Gruppierungsoption die Gruppen aus. Schon hast Du was Du willst.
sklausing, es geht ihm um
am 24.06.2009 - 13:00 Uhr
sklausing, es geht ihm um das CCK-Feld User Reference. Dort können die auswählbaren User aus einem View kommen. Allerdings geht als "Argument" nur eine feste Gruppen-ID, d.h. es kann nur aus einer Gruppe gewählt werden, jedoch nicht dynamisch aus der, in der man sich gerade befindet.
undpaul
Longevity Insights from Top Health Podcasts
Ich glaube ich habe einen
am 24.06.2009 - 15:10 Uhr
Ich glaube ich habe einen Ansatz gefunden: http://www.drupalcenter.de/node/15364#comment-53899
die letzte Zeile wird wahrscheinlich der Schlüssel sein:
- den View in der template.tpl.php themen und darin je nach Rolle des aktuellen Users nur Usernodes von Usern mit derselben Rolle zurückgeben lassen
Statt das über 'Rollen' zu machen, nur die User zurückgeben die der Gruppe angehören.
Leider weiß ich nicht wie das funktioniert. Ich kann zwar PHP sehr gut, aber im Umgang mit Drupal noch ein bisschen wenig. Welche hooks muss ich da benutzen? Ich weiß leider auch nicht unter was ich nachschauen müsste um zum Ziel zu gelangen. Kann mir da jemand einen Ansatz liefern?
gelöst!
am 27.06.2009 - 01:17 Uhr
Endlich!! Ich habe eine Lösung gefunden ;-)
Man muss in den Views anstatt ein Argument eine Beziehung definieren:
Beziehungen:
------------------
Organische Gruppen: Gruppenbeitrag (Mitglied)
[X] Beziehung ist erforderlich
Dadurch werden immer die richtigen User im Untergruppen-Formular aufgelistet.
Hey, cool dass du noch ne
am 27.06.2009 - 09:48 Uhr
Hey, cool dass du noch ne Lösung gefunden hast! Kannst du das noch genauer beschreiben? Also ich würde nun den og_members_faces View duplizieren, die meisten Felder entfernen. Dann die Beziehung hinzufügen und bei Argumenten ist jetzt nichts mehr? Hast du noch was unter Filter?
Und im Benutzerreferenz-Feld wählst du nur den Namen des Views aus und das Argument-Feld bleibt leer?
Könntest du vielleicht auch mal deinen View exportieren, dann könnte ich genauer sehen warum es bei mir nicht geht...
Danke
Anja
http://www.twitter.com/aschiwi
undpaul
Longevity Insights from Top Health Podcasts
Na klar. Hier der Code des
am 27.06.2009 - 16:42 Uhr
Na klar. Hier der Code des Views:
$view = new view;
$view->name = 'og_members';
$view->description = 'Anzeige der Benutzer einer Gruppe';
$view->tag = 'neu';
$view->view_php = '';
$view->base_table = 'users';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Standards', 'default');
$handler->override_option('relationships', array(
'nid' => array(
'label' => 'Gruppenbeitrag (Mitglied)',
'required' => 1,
'id' => 'nid',
'table' => 'og_uid',
'field' => 'nid',
'relationship' => 'none',
),
));
$handler->override_option('fields', array(
'name' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'link_class' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'strip_tags' => 0,
'html' => 0,
),
'link_to_user' => 1,
'overwrite_anonymous' => 0,
'anonymous_text' => '',
'exclude' => 0,
'id' => 'name',
'table' => 'users',
'field' => 'name',
'relationship' => 'none',
),
));
$handler->override_option('access', array(
'type' => 'perm',
'perm' => 'access content',
));
$handler->override_option('cache', array(
'type' => 'none',
));
$handler->override_option('items_per_page', 0);
$handler->override_option('style_options', array(
'grouping' => '',
));
$handler = $view->new_display('page', 'Seite', 'page_1');
$handler->override_option('path', 'gruppe/members');
$handler->override_option('menu', array(
'type' => 'none',
'title' => '',
'description' => '',
'weight' => 0,
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
'type' => 'none',
'title' => '',
'description' => '',
'weight' => 0,
));
Viel Erfolg damit ;-)
Achja, in der Benutzer-Referenz nur den richtigen View auswählen und das Argument leer lassen.
Hm, danke erstmal. Aber bei
am 27.06.2009 - 17:08 Uhr
Hm, danke erstmal. Aber bei mir tut das nicht das gewünschte. Es zeigt nur User an, die überhaupt in einer Gruppe sind, nicht aber nur User, die nur in dieser Gruppe sind. Ist bei mir aber nicht so schlimm, wäre nur schön gewesen ;)
undpaul
Longevity Insights from Top Health Podcasts
In der Views-Ansicht zeigt
am 27.06.2009 - 17:18 Uhr
In der Views-Ansicht zeigt der bei mir auch alle User an. Aber sobald man beim anlegen einer Untergruppe ist, werden bei mir nur die richtigen User (die der Gruppe angehören) aufgelistet.
Das ist ja seltsam - was
am 28.06.2009 - 09:37 Uhr
Das ist ja seltsam - was anderes mache ich eigentlich auch nicht. Die Untergruppe ist ja lediglich ein Node in der OG, bei dir ja auch ne?
undpaul
Longevity Insights from Top Health Podcasts
Oh, komisch. Also ich habe
am 28.06.2009 - 11:37 Uhr
Oh, komisch. Also ich habe jetzt mit Node Hierarchy gearbeitet (Hauptgruppe als Parent und Untergruppe als Child). Jedoch hab ich dazu in den Views ja nix eingestellt. Deshalb hatte ich gedacht das sei unwichtig. Weiß nicht ob es daran liegt...
Ok, mit Node Hierarchy habe
am 29.06.2009 - 10:25 Uhr
Ok, mit Node Hierarchy habe ich nicht gearbeitet.
Habe nun eben noch Node Hierarchy installiert. Der Inhaltstyp, der bei mir die OG Gruppe ist, ist Parent, die "Untergruppe" ist Child. Dennoch ändert sich nichts im Feld Benutzerreferenz. Evtl. fällt dir noch ein, was du vielleicht anders eingestellt hast. Ansonsten werde ich das wohl aufgeben :-)
undpaul
Longevity Insights from Top Health Podcasts
Hey Scentyoo, kannst du mal
am 01.07.2009 - 15:54 Uhr
Hey Scentyoo, kannst du mal deinen Inhaltstypen exportieren? Ich würde das so gern auch hinkriegen, aber ich hab immer nur alle Leute drin, die zu irgendeiner Organic Group gehören, nicht zu der aktuellen. Dabei sag ich dem Projekt über Node Hierarchy, wer sein Parent ist.
***edit
Was mir noch einfällt: ich benutze OG 6.x-2.0-rc3, weil Version 6.x-1.3 ab und an den Kontext verliert, z.B. auf der /faces Seite. Du benutzt sicher Version 6.x-1.3?
undpaul
Longevity Insights from Top Health Podcasts
Hey! So ein Mist!! In meiner
am 01.07.2009 - 16:27 Uhr
Hey! So ein Mist!! In meiner Test-Gruppe wurden nur zufällig die richtigen Leute angezeigt. Durch deine Fragen hatte ich nochmal alles überprüft und gemerkt, dass es doch nicht klappt!
Ich denke wir kommen nicht drum herum dafür ein Modul zu programmieren... Ich habe in den kommenden Tagen sehr wenig Zeit, jedoch brauche ich die Funktion auch unbedingt. Deshalb werde ich mich bei Gelegenheit nochmal dran setzen und mir etwas überlegen. Vielleicht fällt dir auch etwas ein.
Mir ist tatsächlich etwas
am 01.07.2009 - 17:08 Uhr
Mir ist tatsächlich etwas eingefallen.
Da ich nicht besonders schlau mit PHP bin, weiß ich nicht wie ich als Argument aus dem Node die Organic Group kriege. Ich werde für meinen Inhaltstyp Untergruppe deshalb (etwas umständlich vielleicht) ein neues Feld anlegen, welches ich per prepopulate mit der Organic Group ID ausfüllen lasse. Den Inhalt dieses Feldes rufe ich dann später wieder ab (siehe folgende Schritte).
1. Den View og_members_faces mal duplizieren, den braucht man ja anderswo auch mit unveränderten Einstellungen.
2. Keine Beziehungen
3. Argumente: Organische Gruppen: Gruppe. Darin dann ankreuzen "Standardargument zu Verfügung stellen" - "Standardtyp für Argumente:" PHP-Code:
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
return $node->field_ognumber[0][value];
} else {
return FALSE;
}
4. Felder: Benutzer: Name
field_ognumber[0][value]
ist das Feld, was ich zuvor hinzugefügt hatte. Ich habe bisher manuell die ID der Group hinzugefügt und sofort waren nur die korrekten Teilnehmer zu sehen. Da für meine User später sowieso immer die OG per prepopulate vorausgewählt wird, damit sie nichts zusätzlich wählen müssen, ändert sich für mich nicht viel. Vielleicht hilft dir das auch, oder du bist schlau genug im Argument die OG des Nodes abzufragen, die muss ja irgendwo sein...undpaul
Longevity Insights from Top Health Podcasts