[gelöst] Alle Organic Groups mit allen Mitgliedern auflisten
![](https://www.drupalcenter.de/files/imagecache/upic_mini/pictures/picture-5576.jpg)
am 01.12.2015 - 11:22 Uhr in
Hallo miteinander,
ich möchte einen View erstellen, in dem alle Organic Groups in einer Tabelle angezeigt werden sowie alle dazugehörigen Mitglieder. Bin mir aber nicht ganz sicher, ob das geht.
Was geht: Eine Tabelle, nach Titel der Gruppe sortiert, aber eine Zeile pro Gruppenmitglied. Die würde ich gerne aggregieren, z.B. mit Komma getrennt oder wie auch immer. (Noch lieber: eine Spalte pro Mitglied bei maximal drei Mitgliedern pro Gruppe)
Das habe ich folgendermaßen erreicht:
Beziehungen:
OG Mitgliedschaft: OG membership from Inhalt group
(OG membership from node group) OG Mitgliedschaft: Benutzer from OG membership
(das zweite ist nötig, um nicht nur die User-ID, sondern den Namen ausgeben zu können)
Sieht dann so aus: http://www.citykirchenprojekte.org/gruppenliste-test
(Die Namen sind eh öffentlich, daher ist die Abbildung hier kein Problem.)
Momentan hat nur "Schweinfurt" zwei Mitglieder. Die hätte ich gerne hintereinander statt in eigenen Zeilen.
Ich habe "Zusammenfassung verwenden" ausprobiert und in den Datenbankabfrageeinstellungen "eindeutig" ausgewählt. Ich habe diverse Kontextfilter ausprobiert und was weiß ich noch alles. Jetzt fällt mir nix mehr ein. Irgendwelche Ideen, wie das gehen könnte?
Viele Grüße und danke schon mal.
Lösung:
Die Lösung ist nicht trivial, aber sie funktioniert.
Schritt 1: Ich füge vorne eine Spalte "NID" ein, die ich verstecke, aber nach der ich mit dem Modul "Views Distinct" filtere ("Filter Repeats")
Schritt 2: Jeder einzelne Eintrag eines Benutzers erhält einen eigenen View (bei mir: Name 1, Email 1, Name 2, Email 2, weitere Namen - da liste ich dann den ganzen Rest auf).
Beziehungen:
OG Mitgliedschaft: OG membership from Inhalt group
(OG membership from node group) OG Mitgliedschaft: Benutzer from OG membership
Kontextfilter: Inhaltsversion: Beitrags-ID (nötig, um diese Information aus der "Basistabelle" zu übernehmen)
Einziges Feld: (user from OG membership) Benutzer: Name
Die angegebene Anzahl von Elementen anzeigen | 1 item (beim 2. und 3. Namen ist da natürlich ein entsprechender Offset drin, so dass auch der 2. bzw. 3. Name angezeigt wird)
Wichtig ist noch, die Benutzer natürlich einheitlich und eindeutig zu sortieren
Außerdem habe ich bei "1. Name" unter "Verhalten, wenn keine Ergebnisse vorliegen" ein Textfeld mit "NN" eingefügt, sonst werden Gruppen ohne Benutzer nicht angezeigt.
Diese Views kann ich dann mit einem Feld "Global: Ansicht" in die Tabelle einfügen. Als Kontextfilter muss ich hier jeweils [!nid] eingeben. Das ist glaube ich vom Modul views_field_view.
Das Ergebnis kann ich euch leider nicht mehr vorführen, weil es jetzt nur noch für eingeloggte Benutzer zugänglich ist.
Eigentlich hatte ich "Views Distinct" so verstanden, dass es die gesamte Aufgabe übernehmen kann und die Benutzer aggregieren kann. Vielleicht ist es mit den Beziehungen überfordert, was weiß ich. Damit hat's jedenfalls nicht geklappt.
- Anmelden oder Registrieren um Kommentare zu schreiben
ich sehe hier nicht deine Views-Formulierung
am 01.12.2015 - 11:27 Uhr
aber mal ins Unreine gedacht:
wenn due nicht nach gruppen als Hauptkriterium suchst, sonder nach User mit seiner Gruppe, und das dann in der Sortierung nach Gruppe darstellst, solltest du alle bekommen.
... aber aggregieren?
am 01.12.2015 - 11:44 Uhr
Vielen Dank für die schnelle Antwort!
Hatte ich auch schon ausprobiert. Aber auch so habe ich es nicht geschafft, dass alle Mitglieder einer Gruppe in der gleichen Zeile landen.
Ich komme letztlich zu genau dem gleichen Ergebnis:
http://www.citykirchenprojekte.org/gruppenliste-test2
Der erste Test ist eine Tabelle aller Group Nodes.
Der zweite Test eine Tabelle aller Benutzer, sortiert nach den zugehörigen Gruppen.
Der erste Test sieht folgendermaßen aus:
$view = new view();
$view->name = 'gruppenliste_test';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Gruppenliste-test';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'gruppenliste-test';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['use_more_text'] = 'mehr';
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['query']['options']['distinct'] = TRUE;
$handler->display->display_options['query']['options']['pure_distinct'] = TRUE;
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['exposed_form']['options']['submit_button'] = 'Anwenden';
$handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Zurücksetzen';
$handler->display->display_options['exposed_form']['options']['exposed_sorts_label'] = 'Sortieren nach';
$handler->display->display_options['exposed_form']['options']['sort_asc_label'] = 'Aufsteigend';
$handler->display->display_options['exposed_form']['options']['sort_desc_label'] = 'Absteigend';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '10';
$handler->display->display_options['pager']['options']['expose']['items_per_page_label'] = 'Elemente pro Seite';
$handler->display->display_options['pager']['options']['expose']['items_per_page_options_all_label'] = '- Alle -';
$handler->display->display_options['pager']['options']['tags']['first'] = '« erste Seite';
$handler->display->display_options['pager']['options']['tags']['previous'] = '‹ vorherige Seite';
$handler->display->display_options['pager']['options']['tags']['next'] = 'nächste Seite ›';
$handler->display->display_options['pager']['options']['tags']['last'] = 'letzte Seite »';
$handler->display->display_options['style_plugin'] = 'table';
$handler->display->display_options['style_options']['columns'] = array(
'title' => 'title',
'name' => 'name',
);
$handler->display->display_options['style_options']['default'] = '-1';
$handler->display->display_options['style_options']['info'] = array(
'title' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
'name' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
);
/* Beziehung: OG Mitgliedschaft: OG membership from Inhalt group */
$handler->display->display_options['relationships']['og_membership_rel_group']['id'] = 'og_membership_rel_group';
$handler->display->display_options['relationships']['og_membership_rel_group']['table'] = 'node';
$handler->display->display_options['relationships']['og_membership_rel_group']['field'] = 'og_membership_rel_group';
$handler->display->display_options['relationships']['og_membership_rel_group']['required'] = TRUE;
/* Beziehung: OG Mitgliedschaft: Benutzer from OG membership */
$handler->display->display_options['relationships']['og_membership_related_user']['id'] = 'og_membership_related_user';
$handler->display->display_options['relationships']['og_membership_related_user']['table'] = 'og_membership';
$handler->display->display_options['relationships']['og_membership_related_user']['field'] = 'og_membership_related_user';
$handler->display->display_options['relationships']['og_membership_related_user']['relationship'] = 'og_membership_rel_group';
$handler->display->display_options['relationships']['og_membership_related_user']['required'] = TRUE;
/* Feld: Inhalt: Titel */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
/* Feld: Benutzer: Name */
$handler->display->display_options['fields']['name']['id'] = 'name';
$handler->display->display_options['fields']['name']['table'] = 'users';
$handler->display->display_options['fields']['name']['field'] = 'name';
$handler->display->display_options['fields']['name']['relationship'] = 'og_membership_related_user';
/* Sortierkriterien: Inhalt: Beitragsdatum */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filterkriterium: Inhalt: Veröffentlicht */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filterkriterium: Inhalt: Typ */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
'citykirchenprojekt' => 'citykirchenprojekt',
);
/* Filterkriterium: Benutzer: Benutzer-ID */
$handler->display->display_options['filters']['uid_raw']['id'] = 'uid_raw';
$handler->display->display_options['filters']['uid_raw']['table'] = 'users';
$handler->display->display_options['filters']['uid_raw']['field'] = 'uid_raw';
$handler->display->display_options['filters']['uid_raw']['relationship'] = 'og_membership_related_user';
$handler->display->display_options['filters']['uid_raw']['operator'] = '>';
$handler->display->display_options['filters']['uid_raw']['value']['value'] = '1';
/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'gruppenliste-test';
$translatables['gruppenliste_test'] = array(
t('Master'),
t('gruppenliste-test'),
t('mehr'),
t('Anwenden'),
t('Zurücksetzen'),
t('Sortieren nach'),
t('Aufsteigend'),
t('Absteigend'),
t('Elemente pro Seite'),
t('- Alle -'),
t('Offset'),
t('« erste Seite'),
t('‹ vorherige Seite'),
t('nächste Seite ›'),
t('letzte Seite »'),
t('OG membership from node group'),
t('user from OG membership'),
t('Titel'),
t('Name'),
t('Page'),
);
in der gleichen Zeile
am 01.12.2015 - 12:59 Uhr
kann nicht so einfach funktionieren, außer du sorgst dafür, dass Einträge der gleichen Klasse mit einem float-Attribut versehen werden (CSS).
Das macht das Template ein wenig komplizierter.
Hmpf. Danke.
am 01.12.2015 - 13:05 Uhr
Ich hab's fast befürchtet. Aber hätte ja sein können, dass jemand eine Idee hat, auf die ich noch nicht gekommen bin. :-)
Danke jedenfalls schon mal soweit.
Schau dir mal dieses Modul an
am 01.12.2015 - 15:03 Uhr
Schau dir mal dieses Modul an https://www.drupal.org/project/views_field_view
Das sollte dir helfen können alles ein eine Zeile zu kriegen.
jetzt schon zwei Ansätze ...
am 01.12.2015 - 16:30 Uhr
Danke. Ich hab auch noch dieses hier gefunden: https://www.drupal.org/project/views_distinct
Das sollte eigentlich laut Beschreibung genau das machen, was ich will. Seltsamerweise schreibt es je nach Einstellung alle Benutzer in jede Zeile ("aggregate"), also nicht nur die, die da hingehören, oder nur den ersten ("filter").
Jetzt habe ich ja zwei Lösungsansätze. Einer von beiden wird schon klappen.
vorläufig halt nur ein Name.
am 01.12.2015 - 17:28 Uhr
Ein Name ist besser als gar keiner. Das Views distinct-Modul funktioniert nicht ganz so, wie es soll. Das "Views in Views" kriege ich auch nicht dazu, mehr als einen Benutzer anzuzeigen. Dann lasse ich es jetzt mal so, wie es derzeit ist. Vielleicht fällt mir noch was Besseres ein.