Views Kontext Beziehungen
am 02.02.2019 - 17:32 Uhr in
Hallo alle,
nach vielen Jahren Drupal und Views, aber erst einer geglückten Kontext-/Beziehungskonfiguration brauche ich wieder Hilfe.
Auf meiner Seite mutathe.de gibt es den Inhaltstyp "Projekte2. Die Projekte werden von "Partnern" mit der Kategorie "Förderpartner" gefördert (die Partner fördern verschiedene Projekte).
Die Projekte enthalten Reference Fields "Förderer" zu den Partnern . Beim Anlegen der Projekte können die Förderer ausgewählt werden und erscheinen so in der Anzeige des Inhaltstyps "Projekt".
Nun möchte ich die Logos der Projektförderer zum jeweiligen Projekt in einem separaten Block anzeigen (hier in der 2. Seitenleiste).
Die Förderer erwarten auch eine Anzeige Ihrer Bildmarke zum Projekt.
Ich habe nun einige Tutorials und Anleitungen gesehen/gelesen und mit Argumenten und Beziehungen gespielt, aber entweder bekomme ich alle Logos, auch mehrfach, oder keine.
Wer hat den Tipp?
Vielen Dank
frank
- Anmelden oder Registrieren um Kommentare zu schreiben
@mehrfach angezeigt Da es für
am 03.02.2019 - 13:50 Uhr
@mehrfach angezeigt
Da es für Views kein Views Distinct in Drupal 8 gibt, kannst du das z.B. mit einem kleinen Modul selbst erledigen.
Z.B. so:
use Drupal\views\ViewExecutable;
/**
* Implements hook_views_pre_render().
*/
function XXXModulnameXXX_views_pre_render(Drupal\views\ViewExecutable $view) {
$unique_uuids = $new_view_result = [];
// Loop through results and filter out duplicate results.
foreach ($view->result as $row) {
// Use UUID so this works for all entities
$uuid = $row->_entity->uuid();
if (!in_array($uuid, $unique_uuids)) {
$new_view_result[] = $row;
$unique_uuids[] = $uuid;
}
}
// Replace $view->result with new array. Apparently views requires sequentially keyed
// array of results instead of skipping keys (e.g. 0, 2, 4, etc), so we can't just
// unset the duplicates.
$view->result = $new_view_result;
}
Wenn keine Logos angezeigt werden, stimmt in der Regel etwas mit dem kontextualen Filter nicht (es wird alles weggefiltert).
Gruß
Berthold
Drupal Video-Tutorials
Danke, aber Module bastele
am 06.02.2019 - 14:13 Uhr
Danke, aber Module bastele ich erst, wenn ich programmieren kann. Außerdem glaube ich, dass bei der Vielzahl funktionierender Drupal-Seiten der Fehler eher in meinem Verständnis als im System liegt. Denn mein Anwendungsfall ist ein typischer.
Der Kontextfilter wird meist "nimm die Node ID" gelöst. Bei Drupal 8 heißt es nur noch ID, und das funktioniert nicht.
Ein Beispiel:
Das Projekt mit der ID 100 wird vom Förderer mit der ID 46 unterstützt.
Wenn ich beim Projekt einen Block mit den daran beteiligten Förder-Logos haben möchte, erstelle ich eine Ansicht "Projektförderer" als Block mit den Inhalten "Titel" und "Logo".
Die Titel lasse ich nicht anzeigen, habe ich aber mit aufgenommen, weil im Projekt das Feld "Förderer" als Referenz existiert. Der Titel des Förderers wird auch im Projekt angezeigt.
Wenn ich im Kontext also die Beitrags-ID als Filter angebe, erwartete ich, dass bei Eingabe von 100 (die ID des Projektes) der entsprechende Förderer erscheint, bzw nur das Logo.
Natürlich nicht. Ich kann 46 eingeben, und bekomme das Logo zu sehen. Kein Wunder.
Ich denke da irgendwo falsch herum. Vor vielen Jahren habe ich das schonmal gelöst, aber ich weiß nicht mehr wie.
Den Umweg über Taxonomie (viele Beispiele im Netz) möchte ich auch nicht gehen, scheint mir auch unlogisch.
Danke und Gruß
Es gibt kein Views distinct
am 09.02.2019 - 23:16 Uhr
Es gibt kein Views distinct weil die Funktion bereits im View Modul integriert ist.
Was bitte möchtest du machen. Ein Bild in einem Block anzeigen, wenn der Artikel eines Partners angezeigt wird?
https://drupal-tv.de
Drupal sehen und lernen
Fast
am 09.02.2019 - 23:06 Uhr
Die Logos der Förderer, die im Inhalt in den Feldern "Förderer" genannt werden.
Dann nimmst du den Inhalt
am 09.02.2019 - 23:21 Uhr
Dann nimmst du den Inhalt erstellt einen Block und fügst das Feld des Bildes zur Blockanzeige hinzu.
Im Kontextfilter Filterst du nach der ID in der URL und bei mehrfachen Ergebnissen stellst du den unter erweitert Datenbankabfragen Einstellungen die Option eindeutig ein.
Das sollte es dann tun.
https://drupal-tv.de
Drupal sehen und lernen
dinmikkith schriebEs gibt
am 09.02.2019 - 23:30 Uhr
Es gibt kein Views distinct weil die Funktion bereits im View Modul integriert ist.
Diese Option gab es immer schon. Dort steht aber auch: es wird versucht, die doppelten herauszufiltern. Das funktioniert in den wenigsten Fällen.
Deswegen gab es ja Views-Distinct.
Und deswegen benötigt man dafür auch ein neues Modul.
Gruß
Berthold
Drupal Video-Tutorials
Sollte dass nicht reichen
am 09.02.2019 - 23:43 Uhr
Sollte dass nicht reichen oder nicht auf Anhieb funktionieren, gibt's auch noch die Funktion Zusammenfassen ebenfalls unter Erweitern und dort gibt es dann auch die von Berthold so gelobte Distinct Funktion wieder. Und zwar nach dem Aktivieren als Einstellung für jedes einzelne Feld in der Anzeige der Ansicht oder auf dem Master für alle Ansichten.
Ich hab leider keinen Rechner hier. Sonst würde ich dir das schnell Zusammenklicken und nebenbei ein Video anfassen.
https://drupal-tv.de
Drupal sehen und lernen
@inmikkith coole Plattform
am 09.02.2019 - 23:59 Uhr
@inmikkith
coole Plattform und cooler Domainname, die du da hast, sieht echt nach was aus.....
@Doppelte Einträge
ich bin mir ziemlich sicher, das es nur so funktionieren wird, wie ich das vorgeschlagen haben.
Mit der Zusammenfassung kommen da manchmal ganz merkwürdige Dinge raus. Ich meine das jedenfalls früher so erlebt zu haben.
Aber vielleicht liege ich ja auch falsch, dann hätte ich wieder was gelernt.
Gruß
Berthold
Drupal Video-Tutorials
Übrigens ist in meinem Modul
am 10.02.2019 - 00:05 Uhr
Übrigens ist in meinem Modul auch noch ein Fehler drin.
Den haben ich erst heute bemerkt:
Statt:
$uuid = $row->_entity->uuid();
muss es heißen:
$uuid = method_exists($row->_entity, 'uuid') ? $row->_entity->uuid() : NULL;
Sonst kann es einen fatalen Fehler geben, falls $row->_entity->uuid() nicht existiert.
Drupal Video-Tutorials
Hi. probier es mal so in der
am 10.02.2019 - 11:11 Uhr
Hi.
probier es mal so in der Art:
// Loop through results and filter out duplicate results.
foreach ($view->result as $row) {
// Use UUID so this works for all entities
$uuid = $row->_entity->uuid();
//Dieses Array sollte dann unique nids haben.
$unique_uuids[$row->nid]=$row;
MfG
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)