web-dev-qa-db-fra.com

Afficher les éléments de menu avec un accès limité aux utilisateurs anonymes

J'ai un site Web qui utilise le module Private pour définir l'accès au contenu, et bien sûr certaines de mes pages ont des éléments de menu. Maintenant, si je définissais une page comme privée, seuls les utilisateurs disposant des autorisations appropriées pouvaient voir cela, ce qui est génial et ce que je voulais.

Mais j'ai un petit problème avec les éléments du menu, ils disparaissent si le contenu qui leur est attribué n'est pas public (c'est-à-dire que la page qui leur est attribuée est privée), c'est OK mais j'aimerais pouvoir toujours montrer ces éléments dans la navigation, donc si l'utilisateur clique dessus, il les mènera à la page de connexion leur demandant d'entrer leurs coordonnées afin de voir cette page particulière.

Donc, fondamentalement, je voudrais changer le comportement des éléments de menu de manière à ce qu'ils soient toujours visibles pour les membres anonymes et enregistrés du site Web, mais lorsque vous cliquez dessus, vous pourrez soit voir la page (si vous êtes connecté) dans) ou être redirigé vers la page de connexion (si anonyme)

J'ai trouvé cette solution qui n'est pas la meilleure pour moi car j'ai beaucoup de pages comme ça donc je cherche une meilleure approche. J'ai même essayé Visibilité de l'élément de men module mais cela n'a pas aidé non plus!

Comment puis-je y parvenir s'il vous plaît?

Luca

9
Luca

Votre problème est assez courant.

Voici comment implémenter une telle astuce dans Drupal 6 et 7 et 8: http://drupal.org/node/300607

Drupal 6 (et 7) a supprimé la possibilité d'afficher les éléments de menu auxquels l'utilisateur n'a pas accès. Cependant, dans certains cas, il est souhaitable d'afficher un élément de menu même si l'utilisateur n'a pas accès à l'élément de menu. Par exemple, si vous utilisez un mécanisme d'authentification qui tente d'acquérir l'authentification lorsqu'un 403 est affiché, vous souhaitez toujours afficher l'élément de menu afin que les utilisateurs aient la possibilité de fournir des informations d'identification pour se connecter.

Solution pour Drupal 7 peut être trouvé ici: http://drupal.org/node/300607#comment-4450062

Si vous préférez un module prêt - vous pouvez le télécharger ici https://github.com/systemseed/always_visible

4
Eugene Fidelin

J'ai eu une situation similaire où les pages devaient apparaître dans le système de menus, mais le contenu ne devrait apparaître qu'aux utilisateurs connectés. La solution finale était très simple et continue de fonctionner.

Au lieu de contrôler l'accès au contenu, le modèle de nœud vérifie si l'utilisateur est connecté. Si tel est le cas, il affiche le contenu. Sinon, du texte apparaît avec des liens pour vous connecter ou vous inscrire.

Ils ne sont pas automatiquement redirigés, donc si c'est critique, ce n'est pas la solution.

Le code en bref:

<?php  
global $user;       
if ( $user->uid ) :
print render($content);
// or in some situations, display a view;
else : 
print 'Please <a href="/user/login">log in</a> or <a href="/user/register">register</a> etc etc.'
endif; 
?>
1
keva