[gelöst] Werte eines CCK-Nodereference Felds einschränken
Eingetragen von Chinees (14)
am 24.10.2010 - 11:56 Uhr in
am 24.10.2010 - 11:56 Uhr in
Hallo!
Wie kann ich denn bestimmten Usern beim Bearbeiten eines CCK-Nodereference-Felds nur bestimmte Werte erlauben?
Ungefähr so: Contenttyp A enthält Referenz zu Typ B. Es existieren die Inhalte a1, b1, b2, b3. Beim Bearbeiten von a1 darf User1 dann nur b1 oder b2 referenzieren, User2 nur b2 oder b3, User3 alle bs etc...
Vielen Dank schonmal!
Chinees
- Anmelden oder Registrieren um Kommentare zu schreiben
Du kannst bei Node-References
am 25.10.2010 - 12:08 Uhr
Du kannst bei Node-References auch Views als "Source" für die Daten nutzen. Über Views sollte man dann diese rechtlichen Sachen genauer definieren können ( hier gibt es dann ja die Möglichkeit Berechtigungen für die Anzeige zu setzen ).. Theoretisch sollte deine Anforderung dann umsetzbar sein.
SteffenR
Hi Steffen! Hab ich heute
am 26.10.2010 - 23:46 Uhr
Hi Steffen!
Hab ich heute ausprobiert und mir eine entsprechende View erstellt. Als Argument übergebe ich die ID des Benutzerprofils (ich verwende content_profile). Dann hab ich "bei Argument nicht vorhanden -> Standardargument zur Verfügung stellen -> PHP-Code" eingestellt:
<?php
$arg = content_profile_load('user_profile', $user->uid)->nid;
return $arg;
?>
Wenn ich die View direkt aufrufe und die ID eines Content-Profiles an die Url anhänge funktioniert das Argument. Aber wenn ich nichts angebe, funktioniert der obige PHP-Code nicht. Hab etwas rumgespielt und es sieht so aus, als bekäme die View als Argument die ID des Content-Profiles von user1.
EDIT: Hm jetzt wird ohne Argument eine leere View zurückgeliefert, vielleicht wars ein Cache-Problem. Jedenfalls immer noch nicht was ich möchte -.-
Eigentlich möchte ich das Argument auch nur für eine bestimmte Rolle so anpassen, der Rest soll "all" bekommen. Wenn ich allerdings das hier verwende
<?php
if(in_array('Rolle1', $user->roles)){
$arg = content_profile_load('user_profile', $user->uid)->nid;
}else{
$arg = 'all';
}
?>
bekomme ich diesen Fehler:
warning: in_array() [function.in-array]: Wrong datatype for second argument in /var/www/vhosts/mydomain.com/httpdocs/sites/default/modules/views/plugins/views_plugin_argument_default_php.inc(48) : eval()'d code on line 3.
Was mache ich verkehrt?
Debug
am 27.10.2010 - 07:05 Uhr
Hallo.
<?php $arg = content_profile_load('user_profile', $user->uid)->nid; ?>
Lass Dir doch mal ausgeben, was dort zurückkommt.
Ich wage zu bezweifeln, dasd Du das gewünschte Ergebnis bekommst.
Stefan
Wenn ich
am 27.10.2010 - 08:03 Uhr
Wenn ich dpm(content_profile_load('user_profile', $user->uid)->nid); ins Views-Template schreibe und die View direkt aufrufe, bekomme ich was ich brauche.
Wenn ich es allerdings direkt in den PHP-Code fürs Standardargument schreibe, funktionierts nicht. Und wenn ich $user ausgeben will, ist es leer.
Der obigen Warning nach zu schließen wird der Code ja in /sites/default/modules/views/plugins/views_plugin_argument_default_php.inc ausgewertet. Kann ich von dort aus irgendwie anders als mit $user an den eingeloggten user herankommen?
$user
am 27.10.2010 - 08:18 Uhr
Wo bekommst Du denn
$user
her?Hast Du
<?php global $user; ?>
vor den Aufruf geschrieben? Ansonsten existiert die Variable an der Stelle nämlich überhaupt nicht.hth,
Stefan
Nein hatte ich nicht -.- Mit
am 27.10.2010 - 08:29 Uhr
Nein hatte ich nicht -.- Mit
<?php
global $user;
?>
Danke!!!