En utilisant Drupal 7, Views 3 et le module de référence Node, j'utilise une vue pour remplir un champ de référence de nœud sur un type de contenu personnalisé. (Donc c'est une vue du type d'affichage "Référence".)
Je souhaite filtrer cette vue pour afficher (et autoriser les utilisateurs à sélectionner) uniquement:
Les filtres 1 et 2 sont toujours obligatoires; alors soit le filtre 3 OR 4 doit également être obligatoire. Je sais que je peux réorganiser les filtres en groupes de filtres pour que cela fonctionne. Le problème est que je ne peux pas trouver un moyen de construire le filtre 4.
Pour le filtre 3, j'ai dû introduire une relation de type "Content: Author", qui a fait apparaître de nombreux nouveaux filtres, y compris "User: Current" que j'ai utilisé pour le filtre 3 (node author == current user).
Pour le filtre 4, je dois filtrer en fonction du rôle de l'actuel tilisateur (pas auteur), et je ne trouve pas comment le faire.
Dans la liste des filtres, un nouveau filtre "Utilisateur: Rôles" est disponible, mais il ne fait référence qu'à la relation "Contenu: Auteur", il ne vérifie donc que les rôles de auteur du nœud. Ce n'est pas ce dont j'ai besoin: je dois vérifier les rôles de tilisateur actuel.
Je suppose que je dois ajouter une nouvelle relation pour importer les données utilisateur actuelles (quelque chose comme "Utilisateur: actuel"), puis filtrer ces données, mais je ne trouve pas cela dans l'écran Ajouter une relation.
Une idée de comment faire ça?
Après @ suggestion de Jimajamma , voici ce que j'ai utilisé. J'ai légèrement adapté son code pour Drupal 7 et pour permettre à d'autres rôles que les administrateurs un accès complet aux résultats.
Dans la vue, ajoutez un filtre contextuel sur Author: Uid
Et utilisez les paramètres suivants:
LORSQUE LA VALEUR DU FILTRE IS NON DISPONIBLE:
Utilisez le code suivant:
global $user;
if (
in_array('administrator', $user->roles) ||
in_array('editor', $user->roles)
)
{return -1;}
else
{return $user->uid;}
LORSQUE LA VALEUR DU FILTRE IS DISPONIBLE OR UN DÉFAUT IS FOURNI
Utilisez le code suivant:
if ($argument == -1)
{return FALSE;}
else
{return TRUE;}
Et c'est tout!
Remarques:
Par rapport à mes paramètres initiaux, la relation (Content: Author
) N'est plus nécessaire; ni le filtre "Auteur" (qui a été introduit par la relation de toute façon).
Apparemment, pour Drupal 6 la condition dans le premier PHP extrait devrait plutôt être if (in_array('super user', array_values($user->roles)))
).
Vous devez ajouter un filtre contextuel pour filtrer en fonction de l'utilisateur actuellement connecté.
Vous devrez également cloner un nouvel affichage de vue pour afficher tous les nœuds pour des rôles spécifiques, configurés par Paramètres de page: Accès> Rôle. Choisissez ensuite Administrateur et tout autre rôle qui devrait voir tous les nœuds.
Vous ne pouvez pas OR un filtre comme un tri, et vous afficheriez la vue de deux manières différentes avec du contenu filtré et tout le contenu, donc je créerais deux affichages de cette vue.