User-Reference als Argument in Views
Eingetragen von GevatterTod (85)
am 15.10.2010 - 18:30 Uhr in
am 15.10.2010 - 18:30 Uhr in
Views ist ja bekanntlich super, Argumente auch. Was das noch toller machen würde, wäre wenn ich folgendes wüßte:
Ich verwende ein Benutzerreferenz-Feld in einem Inhaltstyp um Bestimme Benutzer als Ansprechpartner für diesen jeweiligen Node auswählbar zu machen.
Daten dieser Benutzer würde ich gern über einen Views-Block jeweils zum Node anzeigen lassen. An Argumenten kann ich aber ja standardmäßig nur die Node-ID vergeben. Wie stelle ich es an dass ich die Userreferenz als Argument nutzen kann um nur die User zu listen die für diesen Node ausgewählt wurden?
- Anmelden oder Registrieren um Kommentare zu schreiben
Versteh ich nicht, kannst du
am 16.10.2010 - 11:01 Uhr
Versteh ich nicht, kannst du nicht das Feld als Argument auswählen? Hast du mal ein Screenshot deiner Views-Einstellungen?
Vielleicht hilft das
am 18.10.2010 - 15:28 Uhr
Vielleicht hilft das weiter:
Hab das Feld Userreferenz als argument entsprechend wie oben übergeben, der Block zeigt aber nada an.
Du solltest nicht
am 18.10.2010 - 16:09 Uhr
Du solltest nicht "Beitrags-ID aus der URL" wählen sondern PHP-Code.
Du willst ja nicht die ID aus der URL sondern das Argument aus dem User-Reference-Field
Probiere mal folgendes in das PHP-Code-Feld einzutragen.
return $node->field_dein__userreference_feldname[0][uid];
(keine PHP-Tags angeben)
Hm... nein damit geht es
am 18.10.2010 - 16:22 Uhr
Hm... nein damit geht es nicht. Wenn ich dem Block unten in der Vorschau eine id eines existierenden Users eingebe kommt auch kein Ergebnis, das Problem erkennt man an der SQL Abfrage:
LEFT JOIN content_field_ansprechpartner node_data_field_ansprechpartner ON node.vid = node_data_field_ansprechpartner.vid
LEFT JOIN content_type_profile node_data_field_foto ON node.vid = node_data_field_foto.vid
WHERE (node.type in ('profile')) AND (node_data_field_ansprechpartner.field_ansprechpartner_uid = 27)
Die Daten die ich will stammen ja aus einem Node-Type "Profil" den ich mit Node-Profile dem jeweiligen User zugeordnet habe. Ich glaube fast, dass ich mit Views hier garnicht weiterkomme oder?
Darf ich fragen warum Du
am 18.10.2010 - 16:34 Uhr
Darf ich fragen warum Du Drupal 5 benutzt? Node-Profile gibts doch nur für die 5er Version oder? Wenn ich mich nicht irre, ist doch aber der Screenshot von Views2 - also für Drupal 6?
Gebe ich in meinem View unter "Vorschau" eine ID an (Argument das User-Reference-Feld) , wird auch nichts angezeigt - der View in der Node zeigt aber die korrekten Ergebnisse an.
Wird der View im User-Profil aufgerufen domain.com/user/benny oder in einem Node domain.com/node/benny ?
Probiere mal folgenden Code
am 18.10.2010 - 16:58 Uhr
Mein oben aufgeführter Return-Wert war unvollständig - der View weiß ja nicht wo er sich befindet - daher muss erst der Node geladen werden. Probiere daher mal folgenden Code für das Feld "PHP-Code"
Vorrausgesetzt - Dein View wird in einem Node aufgerufen - nicht im Profile!
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
return $node->field_dein_userreference_feld[0][uid];
}
Sorry... "Content Profile"
am 18.10.2010 - 17:08 Uhr
Sorry... "Content Profile" nicht "Node-Profile"... mea culpa.
Mit dem Code oben geht es auch nicht, ich denke das Problem ist, dass ich ja das Argument nicht mit dem Primärschlüssel der Profile vergleichen muss sondern mit dem Fremdschlüssel der zwischen Profil und User besteht, ich hätte also quasi nicht die User verknüpfen müssen sondern die Profile direkt, oder sehe ich das falsch.
Gibts einen Weg da irgendwie ranzukommen über Views?
Was Du mit Zitat: .... dass
am 18.10.2010 - 17:12 Uhr
Was Du mit
.... dass ich ja das Argument nicht mit dem Primärschlüssel der Profile vergleichen muss sondern mit dem Fremdschlüssel der zwischen Profil und User besteht, ich hätte also quasi nicht die User verknüpfen müssen sondern die Profile direkt, oder sehe ich das falsch
meinst, kann ich leider nicht nachvollziehen.
Was soll "Primärschlüssel" und "Fremdschlüssel" sein?
Tut mir leid - ich verstehe Dich leider nicht.
Ich meine auf Datenbankebene.
am 18.10.2010 - 17:36 Uhr
Ich meine auf Datenbankebene. Die Node-ID (Primärschlüssel).
Ich kann ja zum Beispiel Node-ID als Argument angeben und dann alle damit verknüpften Inhalte anzeigen bzw herausfiltern
Aber hier in dem Beispiel will ich ja
-Benutzer-ID übergeben als Argument
-herausfinden welches Profil zu welchem Benutzer gehört (und genau da glaube ich liegt die Schwierigkeit)
-Inhalte der Felder aus diesem Profil auslesen
Der Weg der einfach funktionierten würde wäre ja z.B:
-NODE-ID des Profils übergeben als Argument
-Felder des passenden Profils zurückgeben
Hinzu kommt, dass ich ja auch in dem Feld der Benutzereferenz nicht nur 1 Argument sonder X übergeben muss, da der Inhaltstyp um den es geht durchaus mehrere Verknüpfte User haben kann.
Hoffe ich habs halbwegs erklärt.
Ich brauche aber leider die Benutzerreferenz auch für eine Berechtigungsgeschichte... Crap! Zur Not werd ichs übers Template machen, ist halt weniger komfortabel, und andererseits würde mich auch einfach interessieren wie weit man mit den Argumenten gehen kann.
Also hab es jetzt nochmal
am 18.10.2010 - 18:21 Uhr
Also hab es jetzt nochmal alles gelesen...
Du möchtest unter der URL node/123 einen Block anzeigen lassen mit Daten aus dem Content-Profile-Node des referenzierten Users?
Grundsätzlich sei dir das Devel-Modul empfohlen, damit kannst du dir die Felder und Werte von Nodes und Usern anzeigen lassen.
Vorgehen:
Block-View erstellen mit den gewünschten Content-Profile Feldern
Argument ist "Benutzer: Uid" damit du nur die des Users bekommst. Falls es mehr als ein Profil pro User gibt geht das so nicht...
Dann Standardargument wie oben beschrieben
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
return $node->field_dein_userreference_feld[0][uid];
}
?>
Ups da war mein Browser mal
am 18.10.2010 - 18:29 Uhr
Ups da war mein Browser mal wieder etwas länger offen :-)
Im Template kannst du in einer Schleife alle uids auslesen und trotzdem die View benutzen falls du möchtest, ebenfalls in Schleife
mittels views_embed_view()
Hab das Thema jetzt über
am 21.10.2010 - 09:47 Uhr
Hab das Thema jetzt über Templating gelöst. Vielen Dank für die Hilfe!
Gleiches Problem
am 29.10.2010 - 15:54 Uhr
Hallo,
ich habe das gleiche Ziel:
ich möchte zu meinem Inhaltstyp-Node x (Produkt) ein Profil des Herstellers angeben. Der Hersteller hat im 2 Profile über content profile. Ein Basisprofil, da wird ihm die Rolle Kunde mit Kaufberechtigung zugewiesen - und ein Verkäuferprofil mit erweiterten Rechten, um Produkte einzustellen.
Ich kriege es aber nicht hin, die entsprechenden Verkäufer-Angaben in einem Views-Block darzustellen, der dann in der Seitenleiste neben dem Produkt angezeigt werden soll.
Auch mit dem oben genannten php-code funktioniert es nicht (vielleicht auch, weil ich das "fiel_dein_userreference_feld" nicht richtig ersetzt habe.
Gibts noch erweiterte Lösungsvorschläge?
Tausend Dank im voraus
Michael
Aber die View an sich
am 29.10.2010 - 16:18 Uhr
Aber die View an sich funktioniert?
Wie heisst denn dein Feld?
Zitat: Auch mit dem oben
am 29.10.2010 - 16:20 Uhr
Auch mit dem oben genannten php-code funktioniert es nicht (vielleicht auch, weil ich das "fiel_dein_userreference_feld" nicht richtig ersetzt habe.
Das Feld musst Du natürlich mit Deinem Feldnamen ersetzen - ansosten kann das ja auch nicht funktionieren ;-)
Ich habe als Argument nun
am 30.10.2010 - 07:35 Uhr
Die View funktioniert nun so halb. Sie ist als Block in der Seitenleiste angeordnet, daneben wird ein Produkt-Node angezeigt.
Ich habe als Argument nun Node: Beitrags-ID gewählt und "Standardargument zu Verfügung stellen"/Beitrags-ID aus der URL gewählt.
Dann sehen ich im Autorenprofil in der Seitenleiste nun den richtigen Autor meines Produkts. Allerdings werden nur die Angaben aus den Feldern mit diesem Schema: Feld Benutzer: Name: angezeigt
Das Profil besteht aus aber vor allem aus CCK-Feldern (es ist mit Content Profile angelegt). Und die Inhaltsfelder
Firma:
Kurzbeschreibung:
Kenntnisse:
Referenzen:
werden nun noch nicht mit ihrem passenden Inhalt gefüllt. Da stehen nur die Feldbezeichnungen - ohne den Inhalt.
Die Felder sind solche: Feld Inhalt: Firma (field_seller_company)
Wo steckt da der Wurm?
Ähmm - ich denke Du willst
am 30.10.2010 - 08:01 Uhr
Ähmm - ich denke Du willst als Argument das Reference Feld nehmen?
Da kann man natürlich "Standardargument zu Verfügung stellen"/Beitrags-ID aus der URL" nicht verwenden.
Und ich dachte Du willst den Hersteller im View anzeigen und nicht den Author des Produkt-Nodes?
Im Moment verstehe ich das nicht so recht was Du erreichen möchtest.
Der Autor des Produkt-Nodes
am 30.10.2010 - 08:53 Uhr
Der Autor des Produkt-Nodes ist bei mir gleichzeitig der Hersteller.
Ein User-Reference-Feld habe ich nicht.
Und: Es funktioniert ja - aber eben nur zum Teil.
Im Augenblick sieht das so aus wie im Bildanhang. Der Ausschnitt zeigt den Hersteller, der sein Produkt selbst online gestellt hat.
Gib mal unter "Beziehungen"
am 30.10.2010 - 09:03 Uhr
Gib mal unter "Beziehungen" Node:Content-Profile an.
Dann klicke jedes einzelene Feld von
Firma:
Kurzbeschreibung:
Kenntnisse:
Referenzen:
an - und wähle im oberen Bereich "Beziehung:Content-Profile" aus.
DANKE!!!
am 30.10.2010 - 09:17 Uhr
Super. Jetzt funktioniert es.
Vielen Dank für diese prompte Hilfe. Jetzt versuche ich mal zu verstehen, was da eigentlich passiert :-)).
Grüße
Michael
(gute Fußzeile übrigens in Deinem Post)
Der View "weiß" ja nicht
am 30.10.2010 - 09:46 Uhr
Der View "weiß" ja nicht woher er die Felder nehmen soll - wenn Du dem View sagst "Nimm das Argument aus der ID", versucht der View die Felder im Produkt-Node zu finden (welche ja nicht vorhanden sind) - deswegen erfolgt eine leere Ausgabe.
Da sich die Felder aber im Content-Profile befinden, müssen wir die Beziehung herstellen.
Stell Dir vor Du befindest Dich in einer fremden Wohnung und jemand sagt dann "Gib mir mal die Vase" - da Du gerade in der Wohnstube bist und dort keine Vase findest - würdest Du sagen "Hier ist nichts"(leere Ausgabe) - Würde aber dazu gesagt "Die ist in der Küche" - wäre die "Küche" die "Beziehung" und Du wüsstest wo Du suchen sollst und findest auch die Vase (die da auf dem Tisch steht) ;-)
Sehr gut erklärt. Wenn Du für
am 30.10.2010 - 10:01 Uhr
Sehr gut erklärt. Wenn Du für alle Views-Fälle das so toll beantworten kannst, sollten wir ein Views-Handbuch schreiben :-)))
Ich stell die doofen Fragen, du gibts die schlauen Antworten...