Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

Media- und Nodeobjekte über Tags verbinden

Eingetragen von AndyLicht (260)
am 08.09.2020 - 19:07 Uhr in
  • Views
  • Drupal 8.x oder neuer

Liebe Community,

ich breche mir gerade mit Relationships und Contextualen Filtern einen ab. Ich möchte gerne einen Block via Views erzeugen, bei dem die Media Images angezeigt werden, die die selben Tags, wie der angezeigt Node hat.
Dafür haben sowohl der Mediatype Image als auch mein entsprechender Content Type ein Reference Feld auf das selbe Vokabular. Nun scheitere ich jedoch an den Einstellungen zum Contextualen und zu den Relationsships.
Ich dachte ich komme über den Contextualen Filter irgendwie an die Node ID und über diese an die IDs des Taxonomy Feldes des Content types. Mit deren Hilfe wollte ich die Where-Bedingung setzen, das gelingt mir jedoch mal so gar nicht.
Eventuell kann mir von euch jemand helfen und den entsprechenden Tip geben.

beste Grüße

‹ View: Stehe auf dem Schlauch Pfad zu Views mehrsprachig erstellen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Du benötigst zwei Beziehungen

Eingetragen von wla (9461)
am 08.09.2020 - 22:08 Uhr

Du benötigst zwei Beziehungen die erste vom Node zum Taxonomy-Begriff, die zweite vom Taxonomy-Begriff (über die erste Beziehung) zum Media Objekt. Als Kontextfilter brauchst Du dann die Node-ID. Das sollte mit einer View zu erstellen sein.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier liegt jetzt leider der

Eingetragen von AndyLicht (260)
am 09.09.2020 - 06:51 Uhr

Hier liegt jetzt leider der Hund begraben, ich weiß nicht wie ich die Beziehung zum Node herstellen soll. Ich kriege die Beziehung zwischen Node und Taxonomy nicht hergestellt, benötige ich dafür einen extra View?
Beim Anlegen des Views habe ich statt "Content", "Media" genommen, weil ich ja Mediaelemente anzeigen lassen will - bin ich hier eventuell schon falsch abgebogen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich kriege es einfach nicht

Eingetragen von AndyLicht (260)
am 30.09.2020 - 17:35 Uhr

Ich kriege es einfach nicht final hin. Daher bitte ich euch erneut um Hilfe, es werden mittlerweile alle Mediaobjekte angezeigt, bei denen ein Termeintrag übereinstimmt, sprich es reicht wenn das Mediaobjekt einen einzigen Termeintrag mit dem Nodeobjekt identisch hat. Mein Wunsch ist aber dass das angezeigt Mediaobjekt alle Termeinträge vom Node haben muss. Sprich, wenn der Node 5 Termeinträge hat, dann muss das Mediaobjekt auch alle 5 Einträge haben, kann aber durchaus auch mehrere haben.
Im Übersichtsbild habe ich das ganze mal versucht aufzuzeigen.

Der Filter beim der 1 ist nur da, weil für jeden gemeinsamen Tag einmal das Mediaobjekt angezeigt wird.
Über die rote zwei greife ich auf die Node ID zu. (siehe Bild views_contextualfilter)
Die rote drei stellt die Beziehung zwischen Media Objekt und Terms/Tags her.
Die rote vier stellt die Beziehung zwischen Node ID und Terms/tags her.

vielleicht hat von euch noch jemand einen Rat.

beste Grüße

AnhangGröße
views_overview.png 280.36 KB
views_contextualfilter.png 361.66 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Liebe Community, ich habe das

Eingetragen von AndyLicht (260)
am 27.07.2021 - 20:11 Uhr

Liebe Community,
ich habe das Thema jetzt erstmal ruhen gehabt und doch habe ich auch dieses Jahr (pünktlich zum Urlaub) das gleiche Problem und bekomme es auch mit einem Jahr Pause nicht gelöst.
Daher versuche ich es noch einmal euch um Hilfe zu ersuchen.
Ich versuche noch einmal genauer zu beschreiben, was ich gemacht habe und was dabei rauskommt:

Ich habe ein Media Imageobjekte mit einem "Feld X" zum Vokabular "Tags" und eben einem Imagefeld.
Das Feld X kann beliebig viele Tags referencieren

Nun habe ich folgende Mediaobjekte (Titel => kommaseparierte Tags)

Media1=> Norwegen, 2020
Media2=>Rügen, 2020
Media3=> Rügen, 2021

Bei meinem Node gibt es das Feld Y, welches ebenfalls auf das Vokabular "Tags" referenziert.
Und ich habe drei Nodes (Titel=> kommaseparierte Tags => erwartete Mediaobjekte => Objekte die nach meiner Methode angezeigt werden):
"Unser Trip nach Nordnorwegen" => 2020, Norwegen => Media1 =>Media1, Media 2
"Das Jahr 2020 im Überblick" => 2020 => Media1, Media2 => Media1, Media2
"Rügen ist groß" => Rügen, 2021 => Media 3 => Media2, Media3

Das Problem bei meinem Filter scheint zu sein, das es ausreicht, wenn ein Tag übereinstimmt, das nächste Problem ist, dass für jede Tag Übereinstimmung auch die Anzahl an Bildern bekomme, sprich, wenn in einem Node 6 Tags sind und in dem Mediaobjekt sind auch 6 Tags und alle 6 stimmen überein, dann wird das Bild 6 Mal angezeigt. Bei 6 Bildern, die eigentlich zu einem Bild gehören sollten sind es dann 36.

Bei den Relationships habe ich zu erst die Beziehung A erzeugt, welche eine Beziehung zum Feld X herstellt.
Anschließend habe ich eine Beziehung zum Feld Y erzeugt.
Und bei den Contextualen Filtern habe ich die Node ID aus der URL ausgelsen.

Nur wie kann ich den Spaß jetzt erweitern, dass jedes Bild wirklich nur einmal und auch nur bei einer gesamten Übereinstimmung angezeigt wird?

mit besten Grüßen
Andy

  • Anmelden oder Registrieren um Kommentare zu schreiben

bei d7 gabs eine einstellung

Eingetragen von caw (2762)
am 28.07.2021 - 15:24 Uhr

bei d7 gabs eine einstellung bei den query settings das hieß sowas wie "distinct"/eindeutig bei der abfrage

  • Anmelden oder Registrieren um Kommentare zu schreiben

In den Einstellungen für den

Eingetragen von AndyLicht (260)
am 30.07.2021 - 07:27 Uhr

In den Einstellungen für den View unter Advanced gibt es die Query-Settings, da kann ich den Haken bei "Distinct" setzen, die Auswirkungen sind gleich Null.

beste Grüße

Das Problem scheint tatsächlich schon recht lange bekannt zu sein: https://www.drupal.org/project/drupal/issues/2993688

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hier gibt es eine 8/9er

Eingetragen von Ionit (1802)
am 30.07.2021 - 15:41 Uhr

Hier gibt es eine 8/9er Version des Moduls "Views Distinct".

https://www.drupal.org/files/issues/2021-02-23/views_distinct.zip

Gefunden hier: https://www.drupal.org/project/drupal/issues/2993688#comment-14170497

  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider hat auch dieses Modul

Eingetragen von AndyLicht (260)
am 01.08.2021 - 10:30 Uhr

Leider hat auch dieses Modul keinerlei Auswirkungen auf die doppelten Objekte. Scheinbar ist die Funktionsfähigkeit noch nicht wirklich gegeben.
Tatsächlich finde ich es aktuell auch schlimmer, dass ich mich zu glatt anstelle, dass die beziehung vollumfänglich funktioniert.
Sprich es müssen alle Tags übereinstimmen und nicht nur einer, damit das Foto angezeigt wird.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast Du schon mit Aggregation versucht?

Eingetragen von jorgemontoyab (107)
am 04.08.2021 - 01:23 Uhr

Ich habe es nicht gemacht, aber wahrscheinlich löst das Dein Problem





Wenn das nicht klappt, schau Dir das hier an: https://www.ostraining.com/blog/drupal/duplicate-views-results/

AnhangGröße
210803_drupalcenter_01.png 88.6 KB
210803_drupalcenter_02.png 74.27 KB
210803_drupalcenter_03.png 66.15 KB
210803_drupalcenter_04.png 63.03 KB
210803_drupalcenter_05.png 64.34 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider funktioniert dies auch

Eingetragen von AndyLicht (260)
am 04.08.2021 - 16:51 Uhr

Leider funktioniert dies auch nicht. Ich bekomme eine rote SQL-Fehlermeldung, das ein Feld nicht existiert. Und auch der Hinweis von Ostraining hilft leider nicht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Guten Abend, die doppelten

Eingetragen von AndyLicht (260)
am 13.08.2021 - 22:04 Uhr

Guten Abend,

die doppelten Einträge habe ich jetzt relativ einfach wegbekommen. Ich hatte versucht mich nochmal mit der Anzeige von allen übereinstimmenden Tags zu beschäftigen und dabei den Filter versehentlich auf Tags delta gesetzt und den Wert auf 0 gesetzt. Dadurch sind die doppelten verschwunden. Nun bleibt das Problem mit den nicht perfekt übereinstimmenden Tags, ich habe das Problem nochmal im Bild tags verdeutlich , mein Ziel ist es das nur die Mediaelemente angezeigt werden, die alle NodeTags enthalten, d.h. das Mediaobjekt kann durchaus eine größere Anzahl an Tags haben, muss aber zwingend auch alle Tags des Nodes referenziert haben.

mit besten Grüßen
Andy

AnhangGröße
tags.png 371.49 KB
2021-08-13 23_00_21-Duplicate of Photo Gallery(Test) (Media) _ Leichtwind.png 302.16 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Mit dem Setzen von Delta auf

Eingetragen von wla (9461)
am 14.08.2021 - 11:04 Uhr

Mit dem Setzen von Delta auf 0 wird immer nur der erste Tag aus der Tagliste des Elements berücksichtigt und die anderen fallen weg.

Das Problem läßt sich, soweit ich das übersehe nur doch Programmierung lösen. Du erstellst zunächst eine View, die die Mediaobjekte auf alle im Kontextfilter übergebenen Tags filtert. In einer selbst geschiebenen Funktion, die hook_preprocess_node benutzt, holst Du erst alle Tags aus Deiner node, rufst dann mittels views_embed_view die angesprochene View auf und übergibst alle Tags als Kontextfilter. Die zurückgegebene Ergebnisliste bereitest Du dann in einem Array auf, das in einem twig-Template ausgegeben werden kann.

Eine andere Lösung sehe ich bei Deiner Datenstruktur nicht.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi,vielen Dank für deine

Eingetragen von AndyLicht (260)
am 14.08.2021 - 15:59 Uhr

Hi,
vielen Dank für deine Antwort. Dann beuge ich mich dem einfach....Ich habe mir nun jedoch gedacht, dass ich zu erst einmal versuche hook_views_query_alter() anzupassen.
Letztendlich muss der Spaß um eine generische Anzahl an:

INNER JOIN {media__field_tags} media__field_tags_value_1 ON media_field_data.mid = media__field_tags_value_1.entity_id AND media__field_tags_value_1.field_tags_target_id = '58'

und einer Gruppe von

((media__field_tags_value_0.field_tags_target_id = '62')  AND (media__field_tags_value_1.field_tags_target_id = '58'))

Bis jetzt habe es geschafft den Query um eine generische Anzahl an Where-Conditions zu erweitern:

<?php

use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\views\query\QueryPluginBase;
use Drupal\node\Entity\Node;
 
/*
* Implements hook_views_query_alter().
*/
function custom_view_query_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
  $id_view = $view->storage->id();
 
  switch($view->storage->id()) {
    case 'duplicate_of_photo_gallery_test_';
$nodeId = $view->args[0];
    $node = Node::load($nodeId);
$i = 0;
foreach ($node->get('field_mt_post_tags')->getValue() as $term) {
  $fieldQueryName = 'media__field_tags_value_' . $i . '.field_tags_target_id';
  if ( 0 === 1) {
  //INNER JOIN {media__field_tags} media__field_tags_value_1
ON media_field_data.mid = media__field_tags_value_1.entity_id AND media__field_tags_value_1.field_tags_target_id = '58'
  $configuration = [
        'type' => 'INNER',
          'table' => 'user__field_region',
          'field' => 'entity_id',
          'left_table' => 'users_field_data',
          'left_field' => 'uid',
          'operator' => '=',
       ];
       $join = Views::pluginManager('join')
        ->createInstance('standard', $configuration);

       $query->queueTable('user__field_region', 'users_field_data', $join , 'user__field_region');
 
 
  $query->where[1]['conditions'][] = [
          "field"    => $fieldQueryName,
          "value"    => $term['target_id'],
          "operator" => '=',
        ];
  }
  $i++;
}
    break;
  }
}

Dazu habe ich ein Modul custom_view_query erzeugt, welches die Datei custom_view_query.views_execution.inc beinhaltet und den obigen Code abgelegt.

Die nächsten Schritte sind die Erweiterungen um eine generische Anzahl an Inner Joins und die Gruppierung der Where-Clauseln.

Ich hoffe dass die dokumentierte Lösungsfindung in Ordnung ist.

beste Grüße Andy

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 2 Tagen 13 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 3 Tagen 5 Stunden
  • melde mich mal wieder, da ich
    vor 8 Wochen 9 Stunden
  • Hey danke
    vor 8 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 11 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association