[gelöst] Views + User-Reference -> Child-Node soll andere Child-Nodes anzeigen?

am 04.09.2010 - 01:59 Uhr in
Hallo,
da ich seit 3 Stunden versuche dieses Problem zu lösen und es nicht hinbekomme, wollte ich mal nachfragen ob von Euch jemand helfen kann.
Ich habe unterschiedliche User-Profile - zu jedem Profile gibt es Child-Nodes welche wiederum von unterschiedlichen Usern angelegt wurden. Diese Child-Nodes enthalten ein User-Reference-Feld mit dem Namen des Inhabers/Autors des referenzierten User-Profiles.
Unter den Child-Nodes gibt es z.B. 4 Nodes (von 4 unterschiedlichen Usern) welche auf den User Benny referenzieren - wenn ich nun einen dieser Nodes aufrufe, möchte ich dort (im Node) per Views anzeigen lassen, dass es es noch 3 weitere Nodes gibt die auf Benny referenzieren (mit Titel, Erstellungs-Datum, Autor etc.).
Ich habe nun schon die ganze Zeit versucht, dieses Problem über "Beziehungen" in Views zu lösen (Angabe des User-Reference-Feldes) dann als Argument "Benutzer-ID" und das Argument-Feld mit dem Beziehungsfeld "verknüpft" - leider führt dies zu keinem Ergebnis. Auch durch das Lesen von endlosen Threads auf drupal.org konnte ich leider keine Lösung finden. Auch die Abwandlung des Beispiels unter http://drupal.org/node/673418#comment-2831264 funktioniert nicht.
Kann mir vielleicht von Euch jemand auf die Sprünge helfen wie dieses Problem lösbar ist - bin momenatn etwas ratlos?
Danke schonmal und nächtliche Grüße
Matthias
- Anmelden oder Registrieren um Kommentare zu schreiben
Tja - ich konnte das Problem
am 04.09.2010 - 19:46 Uhr
Tja - ich konnte das Problem leider immer noch nicht lösen.
Ehrlich gesagt, zweifel ich auch langsam an meinem Verständis bzgl. des Problems.
Im Child-Node gibt es das ausgefüllte User-Reference-Feld.
Dort ist der verlinkte Name des Parent-Profiles/Users enthalten

Gebe ich über PHP das User-Reference-Feld aus, wird mir auch die richtige UID ausgegeben (im Fall Benny ist es 7)
Normalerweise müsste ich doch "nur" dieses Feld als Argument angeben(was ich auch gemacht habe) -> Views nimmt sich dann die URL des referenzierten Profiles - und über "Benutzer-ID aus der URL" - schnappt sich Views das richtige Argument (7) des Parent-Profils (in diesem Beispiel von Benny).
Das klappt aber nicht - Views nimmt sich trotz der Angabe von field_xxx_userreference immer das Argument aus der URL des Child-Nodes (node/bla) sodass weitere Child-Nodes des Child-Node-Authors angezeigt werden - aber nicht die Child-Nodes - die den User (Benny) aus dem Parent-Profil referenzieren.
Wenn ich das Argument "7" in der Views-Live-Vorschau des Blocks angebe, werden mir die korrekten Ergebnisse ausgegeben - also scheint Views aus dem User-Reference-Feld das Argument nicht extrahieren zu können. Warum weiß ich leider nicht.
Falls von Euch jemand den Fehler sehen sollte, würde ich mich wirklich über eine Rückmeldung freuen denn ich bin momentan mit meinem Latein am Ende.
Viele GRüße Matthias
Nach geschätzten 300 "Trial
am 05.09.2010 - 13:48 Uhr
Nach geschätzten 300 "Trial and Error" Versuchen und 10 Stunden Frust habe ich es nun selbst heraus gefunden.
Damit funktionierts ... (als Argument das User-Reference-Field ausgewählt und dann über PHP-Code folgendes angeben)
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
return $node->field_xxx_userreference[0][uid];
}
Warum man hier allerdings
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
dazu schreiben muss und die alleinige Angabe von
return $node->field_xxx_userreference[0][uid];
nicht ausreichen ist, ist mir allerdings immer noch schleierhaft denn das Argument steckt ja in diesem Feld drin - warum man vorher noch node_load(arg(1)) laden muss - das erschließt sich mir leider nicht.
du mußt views ja auch sagen
am 05.09.2010 - 18:42 Uhr
du mußt views ja auch sagen von WELCHEM Node du field_xxx_userreference habne willst.
mit
<?php
$node = node_load(arg(1));
?>
ladest du den Node dessen id du ja als arg(1) übergibst
und von diesem Node hoöst du dann $node->field_xxx_userreference[0][uid];
Hallo Sepp, naja - der View
am 05.09.2010 - 18:59 Uhr
Hallo Sepp,
naja - der View befindet sich doch schon in dem entsprechendem Node bzw. wurde von dem Node aufgerufen.
Müsste der View jetzt nicht schon "wissen" wo er sich befindet und, dass die Angabe von return $node->field_xxx_userreference[0][uid]; sich auf den aufgerufenen Node bezieht?
Es ist mir leider etwas rätselhaft warum der View (intern) den Node nochmal laden muss um das richtige Feld zu finden.
Der Ablauf ist doch so (meiner Meinung nach)
Der Node wird vom User aufgerufen (node/bla)
Der Node lädt gleichzeitg den View (nach) ...
Der View müsste doch nun wissen von wo er geladen wurde - auf/in node/bla (scheinbar aber nicht)
Das war der große Knackpunkt bei der Sache - ich hatte angenommen, dass der View schon "weiß" in welchem Node er sich befindet und hatte daher angenommen, dass man $node = node_load(arg(1)) nicht extra angeben muss.
Schöne Grüße
Matthias
Du kannst in diesem PHP-Feld,
am 05.09.2010 - 19:15 Uhr
Du kannst in diesem PHP-Feld, um ein Default-Wert für diesen Argument festzulegen, nicht einfach $variablen verwenden, die nicht vorhanden sind. Deshalb kann $node nicht einfachso verwendet werden.
Jo - das hab ich jetzt
am 05.09.2010 - 20:07 Uhr
Jo - das hab ich jetzt gelernt ;-)
Ich war schon grün vor Ärger - weil das nicht klappen wollte - aber nun ist etwas mehr Licht ins Dunkel gekommen.