Come faccio a "scoprire" i collegamenti ai menu di contenuti non autorizzati in Drupal 6?

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

  •  10-07-2019
  •  | 
  •  

Domanda

Il modulo del menu Drupal 6 nasconde collegamenti a contenuti a cui l'utente corrente non dispone dell'autorizzazione per accedere. Questo ha senso, ma ci sono momenti in cui potresti voler mostrare i link e andare a una pagina "non sei autorizzato a visualizzare questo contenuto" (ad esempio per scopi di marketing).

C'è un modo semplice per mostrare questi link? Capisco che le versioni precedenti di Drupal in realtà richiedessero il download di un modulo per NASCONDERE i collegamenti a pagine non autorizzate!

È stato utile?

Soluzione 7

Ho trovato un modulo che sembra effettivamente fornire la funzionalità che desidero:

http: // blog .davereid.net / content /-contenuto limitato-yet-another-differente-drupal-node-access-modulo

È davvero semplice, aggiunge solo un selettore all'interno di ogni pagina di creazione del nodo in cui è possibile scegliere quali ruoli avranno accesso ad esso. Chi non lo farà vedrà comunque il link al menu e questo porterà ad una pagina personalizzata "devi registrarti per visualizzare questa". L'ho installato su un sito di prova Drupal e sembra funzionare bene; peccato non l'ho trovato un paio di settimane fa!

Altri suggerimenti

È sempre stato così (almeno dalla 4.7).

Non puoi scoprire voci di menu non autorizzate fuori dalla scatola. Potrebbe esserci un modulo speciale però ...

Quello che potresti fare è lasciare che la pagina del menu punti a una funzione che reindirizza alla pagina a cui vuoi che il tuo menu faccia riferimento. Questo non è l'ideale in molti modi, ma poiché tutti possono accedere alla funzione che esegue il reindirizzamento, dovrebbe funzionare. Puoi semplicemente inserire questo codice in un modulo personalizzato che crei.

Non c'è modo di farlo nel Drupal predefinito e non sono a conoscenza di alcun modulo contributivo che fornisce questa funzionalità.

Vengono in mente due soluzioni per fare questo facilmente .

  1. Con una codifica minima è quello di nascondere la voce di menu reale e renderla invisibile, quindi creare una pagina con un po 'di codice PHP che reindirizza alla voce di menu corretta se l'utente ha accesso e che mostra un altro testo per le persone che non lo fanno. Quindi crea una voce di menu che punta al tuo nodo.

  2. Coinvolge più codice, ma probabilmente sarà più robusto. Crea il tuo modulo di base con un hook_menu che ha il controllo di accesso opposto al reale voce di menu insieme a una piccola funzione di richiamata del menu con il testo che si desidera mostrare agli utenti non privilegiati.

Se vuoi farlo per molte voci di menu, dovresti trovare una soluzione più flessibile per gestirla correttamente.

supponendo che ogni contenuto sia un nodo è possibile mantenere i menu senza regole di accesso e quindi utilizzare

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

puoi rifiutare l'accesso ad alcuni nodi ..

spero che sia utile.

Alla fine l'ho fatto in un modo leggermente diverso, creando una tassonomia per " open " o "limitato" contenuto e inseriscilo nell'intestazione del mio tema:

<?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 è una pagina che ho creato che contiene tutti i soliti moduli di login / iscrizione. Sembra funzionare bene per me finora!

Nota: Se le persone disabilitano deliberatamente il reindirizzamento nel proprio browser non verranno reindirizzate, tuttavia quando ho provato a Opera con il reindirizzamento ho spento la pagina caricata fino al punto in cui il reindirizzamento stava cercando di succede, e poi niente dopo, quindi il contenuto era ancora limitato in questo caso.

Un po 'tardi, ma è così che l'ho capito:

/**
 * 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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top