Dans / admin / people, je souhaite masquer le nom d'affichage (c'est-à-dire que le nom d'affichage ne doit pas apparaître dans la liste des utilisateurs), mais uniquement pour un rôle spécifique.
Dans mon fichier .module, j'ai essayé les crochets suivants:
function hook_views_data_alter(array &$data) {
kint($data['users']);die;
}
function hook_views_pre_render(\Drupal\views\ViewExecutable $view) {
if($view->id() == 'myview'){
print_r($view->result);die;
// kint($value->_entity->get('title')->value);
}
}
function hook_views_post_render(\Drupal\views\ViewExecutable $view) {
if ($view->id() == 'viewid') {
// Set the view title.
$field_name = $view->getFields();
}
}
function hook_field_views_data_views_data_alter(array &$data, \Drupal\field\FieldStorageConfigInterface $field) {
$field_name = $field->getName();
echo 'hjsjhwd';
print_r($field_name);die;
}
Aucun d'eux ne m'a aidé. J'ai pensé à obtenir des champs de la vue "utilisateur" et après cela je le désélectionnerai pour un rôle particulier. Mais dans la liste des vues, le champ Nom apparaît toujours. Comment puis-je le cacher pour un rôle particulier?
Y'a-t-il une quelconque façon de réussir cela?
display name
sur / admin / page, je veux cacher cette colonne en fait. Peut-être que si je masque le champ, cette colonne est également masquée pour mon rôle particulier.Réponses:
Le moyen le plus efficace serait d'utiliser hook_views_pre_view (), qui vous permet de modifier une vue au tout début du processus, c'est-à-dire avant que toute requête soit créée / exécutée et avant tout rendu. Vous pouvez supprimer le gestionnaire de champ «nom» de la vue en fonction de la logique souhaitée.
Cette solution suppose que vous êtes uniquement intéressé à servir ce cas d'utilisation très spécifique - supprimez le champ uniquement de cette vue spécifique. Les utilisateurs peuvent toujours voir les noms d'affichage des utilisateurs dans d'autres zones du site Web.
la source
$views->id() ===
?$views->id()
? Devrait-il en être ainsi$view->id()
?if (empty(array_intersect($userRoles, $userRolesAllowed)))
. Plus d'infos surarray_intersect
Vous pouvez masquer des champs à l'aide de hook_entity_field_access , vous pouvez masquer un champ en fonction du compte d'utilisateur (le rôle est l'une de ses propriétés), de l'opération et de l'entité qui contient le champ.
Vous pouvez également utiliser le module Autorisations de champ pour masquer un champ de certains rôles.
la source
Lorsque vous devez supprimer l'en-tête de table <td> ainsi que les lignes <td>, vous pouvez utiliser template_preprocess_views_view_table
Remarque: Pour tout besoin comme celui-ci, essayez de ne pas utiliser plus de deux crochets pour répondre à vos besoins. Depuis Drupal fera toujours tout ce que vous voulez en utilisant un ou deux crochets plus.
Mise à jour: pour Drupal 7 utilisant également le même nom de hook sur cette URL template_preprocess_views_view_table
la source
Utilisez le module Permissions de champ de vues . Aucun code personnalisé requis!
La prise en charge des rôles a été ajoutée il y a environ un mois.
la source