Ist es möglich, ein node reference field mit Anlegen des nodes zu "fixieren" ?
am 28.12.2010 - 11:23 Uhr in
Hallo!
Stehe mal wieder vor einer Herausforderung mit einem CCK Modell (mit einem node reference und einem user reference field) in Verbindung mit Node Access.
Ich habe also einen CCK Content Type (sagen wir mal Rezept), der eine Referenz auf einen übergeordneten node (sagen wir mal Kochbuch) erlaubt, sowie optional einen "Co-Autor" als user reference erfassen soll.
Aktuelles set-up:
Im Rezept ist das Feld für den übergeordneten node (Kochbuch) eine node reference, wobei die Auswahl über einen View auf die speziellen Nodes (Kochbücher) des aktuellen Nutzers ("A") limitiert ist.
Im Feld für den Co-Autor des Rezeptes x kann der aktuelle Nutzer "A" einen beliebigen anderen Nutzer "B" auswählen/eintragen.
Diesem Nutzer "B" wird über Node Acess dann auch automatisch die Berechtigung eingeräumt den node "Rezept x" zu bearbeiten.
So weit so gut - das Berechtigungsding funktioniert mit Node Access und dem user reference field im Hintergrund problemlos und wunschgemäß.
Problem ist jetzt aber ganz banal, daß das eingangs erwähnte node reference Feld "Kochbuch" für Nutzer "B" nicht mehr die ursprüngliche Auswahl anbietet - also nicht mehr die Kochbücher von A, zu dem der Node ja mal zugeordnet wurde, sondern die Kochbücher von B... das funktioniert natürlich nicht... schon gar nicht, weil das Feld als Pflichtfeld definiert ist.
Daher die Frage:
Kann man beim Anlegen eines nodes nicht in irgendeiner Form einen Wert für ein (node reference) CCK Feld so festschreiben, daß es nie wieder geändert/bearbeitet werden kann? Das wäre nicht nur hilfreich, um das o.g. Problem zu vermeiden, sondern läge auch viel näher am eigentlichen Verwendungszweck (der nicht wirklich aus Kochbuch/Rezept besteht...).
Danke vorab!
- Anmelden oder Registrieren um Kommentare zu schreiben
Auswahl
am 28.12.2010 - 12:51 Uhr
Hallo.
Besteht die Möglichkeit, den View für die Kochbuch-Auswahl so zu erweitern, dass dort nicht nur Nodes des aktuellen Benutzers, sondern Nodes (vom Typ "Kochbuch") der Autoren des gerade angezeigten Nodes ("Rezept") gelistet werden?
Also (in Pseudo-SQL):
"select nid from node where node.type='kochbuch' AND node.uid in ([uids])", wobei
[uids]
eine Liste aus Autor + Co-Autoren des Rezepts ist.Eventuell funktioniert das mit [do:views_or Views OR] bzw. Views3.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Views OR wäre schon nicht schlecht...
am 28.12.2010 - 15:13 Uhr
Hallo Stefan und danke schon mal für die schnelle Antwort.
Den Filter zu erweitern war auch schon mein Plan, nur finde ich keine vernünftige Lösung, um auf die auch von dir beschriebene Auswahl zu kommen.
Was ich in der Zwischenzeit noch eingerichtet habe, ist field_permissions: Damit kann ich das Referenzfeld "Kochbuch" so einstellen, daß es nur beim node anlegen angezeigt wird. Sieht erstmal gut aus, weil es dann nicht mehr auf der "Bearbeiten" Seite von Rezept erscheint und man die Hoffnung hat, daß der Wert einfach festgeschrieben ist.
Ist er aber leider nicht - das Feld wird zwar verborgen aber der Filter prüft im Hintergrund immer noch genau so, ob der aktuelle Nutzer die vorhandene Feldauswahl treffen kann... Damit allein funktioniert es also immer noch nicht.
Zweiter Ansatz war dann, im Content Type Kochbuch noch ein user reference Feld "Berechtigung zum Rezepteschreiben" zu ergänzen. Damit wollte ich dann den Filter so umbauen, daß nicht mehr auf "Content=Kochbuch" AND "Benutzer=Aktuell Ja" geprüft wird sondern auf "Content=Kochbuch" AND "Berechtigung zum Rezepteschreiben=[username] (des aktuellen Nutzers)". Wäre auch nicht schlimm gewesen mit diesem Umweg... Nur kann man Inhaltefelder (also hier "Berechtigung zum Rezepteschreiben=....") wohl nur gegen absolute Werte (hier die usernamen als Feldinhalt) prüfen und nicht gegen den aktuellen Nutzer (oder?).
Oder fehlt mir hier nur ein Trick, das Feld "Berechtigung..." vorher als (nicht sichtbares) Feld zu integrieren oder irgendwie mit Argumenten oder Beziehungen zu arbeiten...?
Also der Filter nochmal auf den Punkt: Ist (einer der Werte aus) user-reference Inhaltefeld "Berechtigung..." = aktuell eingeloggter [user]
Wenn diese Prüfung funktionieren würde, hätte ich dann die Optionen, daß auch der Kochbuch-Autor sich in die Liste der Nutzer mit "Berechtigung zum Rezepteschreiben" einträgt oder ich tatsächlich Views OR verwende und dann auf Autor OR "Berechtigung..." prüfe.