Comment "afficher" les liens du menu vers du contenu non autorisé dans Drupal 6?

StackOverflow https://stackoverflow.com/questions/1218879

  •  10-07-2019
  •  | 
  •  

Question

Le module de menu Drupal 6 masque les liens vers des contenus auxquels l’utilisateur actuel n’est pas autorisé à accéder. Cela a du sens, mais il peut arriver que vous souhaitiez afficher des liens et accéder à une page "vous n'êtes pas autorisé à afficher ce contenu" (par exemple, à des fins de marketing).

Existe-t-il un moyen simple d’afficher ces liens? Je comprends que les versions précédentes de Drupal vous demandaient en réalité de télécharger un module pour CACHER les liens vers des pages non autorisées!

Était-ce utile?

La solution 7

J'ai trouvé un module qui semble fournir les fonctionnalités souhaitées:

http: // blog .davereid.net / content / restricted-content-encore-un-autre-module-d'accès-drupal-différent

C’est très simple, il ajoute simplement un sélecteur dans chaque page de création de nœud où vous pouvez choisir les rôles qui y auront accès. Tous ceux qui ne verront pas le lien de menu continueront, ce qui donnera lieu à une page personnalisée "vous devez vous enregistrer pour afficher cette page". Je l'ai installé sur un site de test Drupal et il semble bien fonctionner. dommage que je ne l'aie pas trouvé il y a quelques semaines!

Autres conseils

Cela a toujours été le cas (au moins depuis le 4.7).

Vous ne pouvez pas afficher les éléments de menu non autorisés hors de la boîte. Il pourrait y avoir un module spécial si ...

Ce que vous pouvez faire est de laisser la page de menu pointer vers une fonction qui redirige vers la page vers laquelle vous souhaitez que votre menu pointe. Cela n’est pas idéal à bien des égards, mais puisque tout le monde peut accéder à la fonction qui effectue la redirection, cela devrait fonctionner. Vous pouvez simplement mettre ce code dans un module personnalisé que vous créez.

Il n'y a aucun moyen de faire cela dans la Drupal par défaut, et je ne suis au courant d'aucun des modules contribués offrant cette fonctionnalité.

Deux solutions nous viennent à l’esprit pour le faire facilement .

  1. C’est avec un minimum de codage que de masquer l’élément de menu réel et de le rendre invisible, puis de créer une page avec du code PHP qui redirige vers l’élément de menu approprié si l’utilisateur a accès et en affichant un autre texte pour les personnes qui le souhaitent. ne pas Créez ensuite un élément de menu qui pointe vers votre nœud.

  2. Implique davantage de codage, mais il sera probablement plus robuste. Créez simplement votre propre module de base avec un hook_menu qui possède le contrôle d'accès opposé au réel élément de menu avec une petite fonction de rappel de menu avec le texte que vous voulez montrer aux utilisateurs non privilégiés.

Si vous souhaitez effectuer cette opération pour de nombreux éléments de menu, une solution plus souple doit être trouvée pour le gérer correctement.

En supposant que chaque contenu est un nœud, vous pouvez conserver les menus sans règles d'accès, puis utiliser

.
hook_view($node, $teaser = FALSE, $page = FALSE)

vous pouvez refuser l'accès à certains nœuds.

espérons que cela vous sera utile.

Finalement, je l’ai fait d’une manière légèrement différente, en créant une taxonomie pour "ouvert". ou " restreint " contenu, et mettez cela dans l'en-tête de mon thème:

<?php

global $user;

//if the user is not logged in, and the node is in taxonomy term "restricted"
//redirect them to the login page
foreach ($node->taxonomy as $tax){
  if ($tax->name == "Restricted" && !$user->uid){
    $query = 'destination=node/'.$node->nid;
    drupal_goto('please-login-continue',$query);  
  }
}
?>

/ please-login est une page que j'ai créée et qui contient tous les formulaires de connexion / inscription habituels. Cela semble bien fonctionner pour moi jusqu'à présent!

Remarque: Si des personnes désactivent délibérément la redirection dans leur navigateur, elles ne seront pas redirigées. Toutefois, lorsque j'essayais dans Opera avec la redirection désactivée, la page était chargée jusqu'au point où la redirection tentait de se connecter. arriver, et puis plus rien après cela - donc le contenu était toujours limité dans ce cas.

Un peu tard, mais c’est comme ça que j’ai travaillé:

/**
 * Implementation of hook_menu()
 */
function mr_gm_menu() {

    $items = array();

    $items['x'] = array(
        'title' => 'X',        
        'page callback' => 'x_view',
        'access arguments' => array('access content'), 
        'type' => MENU_NORMAL_ITEM,
        'menu_name' => 'main-menu',
        'weight' => 10,
    );  

    return $items;
}

function x_view(){

  global $user;

  if ($user->uid):
    drupal_goto('node/add/X');
  else:
    drupal_goto('user');    
  endif;

  return;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top