Verweise zwischen Nodes; View der mir diesen Verweis zu einer gegebenen Node anzeigt
am 14.07.2008 - 09:15 Uhr in
Hallo zusammen,
ich habe da mal wieder ein Problem bei der Umsetzung eines Sachverhalts mittels CKK und Views 2
Folgede Informationen sind gegeben:
------------------------------------
Ich habe 2 Content Types Mitarbeiter und Publikationen. Mitarbeiter können Publikationen veröffentlichen. Somit muss ich es irgendwie hinbekommen die Publikationen über ein Feld (CKK) mit dem entsprechenden Mitarbeiter zu verbinden....
Welche Lösung würdet ihr hierzu vorschlagen (Node Reference, lediglich NodeId.... welche Möglichkeiten sehr ihr noch?)
Desweiteren brauche ich einen View, der mir zu einem gegebenen Mitarbeiter die Publikationen anzeigt. Die URL meiner Mitarbeiter habe ich über URL-Aliase jeweils staff/Nachname_des_Mitarbeiter genannt (Nachnamen sind eindeutig).
Deswegen hatte ich schon über eine Lösung mit Arguments in Views nachgedacht... Da ich ja immer eine eindeitige URL habe 'staff/Nachname_des_Mitarbeiter' müsste man das doch irgendwie hinbekommen (gesetzt den Fall ich habe die Verwendung von Arguments richtig verstanden )
Kann eine Umsetzung mit Arguments funktionieren?
Gehen wir mal davon aus, ich habe eine Node-Reference auf den Mitarbeiter als Feld der Publikation gespeichert.
Was muss ich nun im View einstellen, damit mir lediglich die Publikationen eines Mitarbeiters angezeigt werden? Alternativ - wie sehe das ganze lediglich bei Speicherung der Node-Id in der Publikation aus?
Das ganze soll ja dann so dynamisch sein, dass je nach ausgewähltem Mitarbeiter nur seine Publikationen aufgelistet werden und das alles über einen View!
Hoffe ihr könnt mir weiterhelfen...
Danke, Gruß
Marcel
- Anmelden oder Registrieren um Kommentare zu schreiben
Nachtrag
am 14.07.2008 - 12:28 Uhr
Habe jetzt versucht das ganze mit einer NodeReference hinzubekommen.
Hatte hierzu einen Beitrag gefunden: http://www.drupalcenter.de/handbuch/6675
Danach soll man als Argument die NodeReference wählen und als Validation PHP-Code folgendes eingeben:
$args[0] = arg(1);
Leider funktioniert das so nicht. Da das Beispiel auf eine NodeId geht, habe ich auch extra einen Mitarbeiter angelegt, dessen URL auf node/nid bspw. node/30 lautet und diesem mehrere Publikationen zugewiesen.
Erwartung: Wenn ich jetzt als Argument node/30 übergebe, dann ist in arg(1) die 30 gespeichert und diese vergleicht er mit dem $args[0]-Wert....
Rein vom Verständnis zum obigen Code-Beispiel:
Müsste es nicht ein '==' sein? Obiger Code st doch eine Zuweisung, oder?
Zudem müsste nach meinem Verständnis in $args[0] die Node-Reference stehen. Ist das nicht ein Objekt? Oder wird als Reference intern nur die Node-id abgelegt. Dann würde obiger Code Sinn machen, da in $args[0] die Id steht....
Im Fall eines Objektes würde ich mit obigem Code abfragen, ob ein Objekt gleich meiner NodeId ist... Das ist natürlich immer false... Somit kriege ich keine Ergebnisse...
Könnte ich also mit $args[0]->nid auf die NodeId des übergebenen Arguments zugreifen?
Festzuhalten ist, dass ich mit obigem Code keine Ergebnisse bekomme... weshalb auch immer?
Weiter probiert....
Dieser Umgang mit Views und Arguments hat mich nicht in Ruhe gelassen, so dass ich weiter probiert habe... Ich bin dann auch zu einer Lösung gekommen (fragt mich nicht wieso das funktioniert hat...)
Was funktionert, ist Validator auf Node setzen, Typ Mitarbeiter wählen und ArgumentType Node Id auswählen...
Dann kann ich über das Argument NodeId bspw. 30 die Publikationen zum Mitarbeiter mit NodeId 30 sehen...
Nun treten aber weitere Probleme auf:
Nun zeigt sich aber ein neues Problem. Ich will mehrsprachig sein, d.h. für meinen Mitarbeiter gibt es jeweils eine Node in Deutsch (bspw. node/5) und eine Node in Englisch (bspw. node/25). Bei Erstellung der Publikation taucht in der Drop-down Box für die Auwahl des Mitarbeiters aber nur der Eintrag in der jeweiligen gerade gewählten Sprache auf, so dass ich meiner Publikationen entweder die node/5 bzw. die node/25 zuweise...
Publikationen sind aber Sprachunaghänging (der Titel ändert sich nicht je nach Sprache...) Somit stehe ich vor dem Problem, dass mit obigem Ansatz die Publikationen jeweils nur zu einem Mitarbeiter in einer Sprache verfügbar sind...
Hat jemand ne Idee wie man das umgehen kann?
Gruß
Marcel
Deine Mitarbeiter sind keine
am 14.07.2008 - 13:40 Uhr
Deine Mitarbeiter sind keine registrierten User? Mit der Rolle Mitarbeiter oder so?
-----------
Luca Curella
Kooperative Netze - Berlin
Mitarbeiter = registrierte User?
am 14.07.2008 - 16:46 Uhr
Hallo,
Nein, die Mitarbeiter sollen nicht mit dem System arbeiten können... Es gilt lediglich die Mitarbeiter eines Uni-Lehrstuhls abzubilden und im Zuge dessen auf einer Detailseite des Mitarbeiters die zugeordneten Publikationen anzuzeigen...
Habe es jetzt hinbekommen, indem ich als Referenz bei der Publikation den Nachnamen des Mitarbeiters abgelegt habe. Somit bin ich sprachunabhängig, da der Nachname sich nicht von einer zu nächsten Sprache ändert (im Gegensatz zur NodeId: hier wird ja für jede Sprache eine eigene Node erzeugt).
Diese Lösung gefällt mir aber noch nicht. Schöner wäre da das Vorgehen mit der Node-Referenz!
Hast du villeicht trotzdem eine Idee, warum obiger Code (siehe Link im Post Nachtrag mit $args[0] ....) nicht funktioniert hat?
Gruß
Marcel
Die Anleitung im Handbuch
am 15.07.2008 - 11:47 Uhr
Die Anleitung im Handbuch bezieht sich auf Views1.x in D6 benutzt du Views2.x
Das ganze funktioniert so leider nicht mehr... oder vielleicht noch nicht :-)
Siehe hierzu eine Diskussion auf drupal.org:
http://drupal.org/node/258801
Folgt man diesem Post müsste entsprechender validation code jetzt eigentlich lauten:
<?php
$newarg = arg(1);
$handler->argument = $newarg;
return true;
?>
klappt leider nicht, weil arg(1) in dieser Form nicht angenommen wird.
Habe noch keine Doku gefunden über die erwartete Syntax.
Jemand anders vielleicht schon?
-----------
Luca Curella
Kooperative Netze - Berlin
Haste mal versucht dein View
am 15.07.2008 - 12:00 Uhr
Haste mal versucht dein View mit User: Current --> Filter the view to the currently logged in user. zu filtern?
----------------------------------------
Alle Angaben ohne Gewähr!!:D
http://www.tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
sind ja eben keine
am 15.07.2008 - 12:22 Uhr
sind ja eben keine user...
hab ich doch schon gefragt - sonst wär es ja einfach :-)
-----------
Luca Curella
Kooperative Netze - Berlin
Das Thema ist noch nicht durch :)
am 17.07.2008 - 22:25 Uhr
Hey zusammen,
also habe das jetzt wie oben beschrieben mit einem Textfeld gelöst, in das ich einfach den Nachnamen des Mitarbeiters eintrage...
Nun gibt es allerdings das Problem, dass zwischen Mitarbeiter und Publikation eine n-n-Beziehung besteht, d.h. ein Mitarbeiter kann mehrere Bücher schreiben, ein Buch kann aber auch von mehreren Mitarbeitern geschrieben werden.
Folglich müsste ich also einer Publikation auch mehrere Mitarbeiter zuordnen. Einfachste Überlegung wäre in das Textfeld einfach eine Komma-separierte Liste von Nachnamen reinzuschreiben...
Nur wie kann ich die dann als Argument in meine View verwenden?
Ich dachte mir da Folgedes: Als Argument-Field habe ich ja dieses Referenzfeld mit der Komma-separierten Liste. In meinem Validation-PHP-Code für das Argument möchte ich dann das aktuell betrachtete Feld (Hier die Frage wie ich im PHP-Code darauf zugreife?) mit explode(",", Feld) in ein Array verwandeln... Danach einfach noch schauen, ob gerade übergebenes Argument im Array vorkommt, wenn ja, dann Satz anzeigen, sonst nicht... Habe ich vielleicht die Verwendung von Argumenten falsch verstanden? Sind doch so etwas wie dynamische Filter, oder?
Mein Validation Code in PHP würde also so aussehen:
<?php
//Aufsplitten des Strings nach Trennzeichen ","
$values = explode(",", <Hier das Fragezeichen wie ich auf das Feld zugreife>);
//in $argument steht ja das aktuell übergebene Argument -> das Wäre im vorliegen Fall der Nachname eines Mitarbeiters
return in_array($argument, $values);
?>
Um mal direkt in SQL zu sprechen. Ich bräuchte ein Abfrage die folgendes leistet:
SELECT node.nid AS nid,
node.title AS node_title
FROM node node
LEFT JOIN content_type_publication node_data_field_reffield
ON node.vid = node_data_field_reffield.vid
WHERE (node.type in ('publication'))
AND (node_data_field_reffield.field_reffield_value LIKE '%Nachname%')
Wobei der Nachname dann ein realer Mitarbeiter-nachname wäre. Wie kriege ich es hin, das Views dort ein LIKE mit Platzhaltern verwendet und nicht ein = 'Nachname'?
Hoffe ich konnte das Problem anschaulich machen und jemand hat einen Tipp!
Bin über jeden Ratschlag dankbar!
Gruß
Marcel