¿Cómo puedo 'mostrar' enlaces de menú a contenido no autorizado en Drupal 6?

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

  •  10-07-2019
  •  | 
  •  

Pregunta

El módulo de menú de Drupal 6 oculta enlaces a contenido para el que el usuario actual no tiene permiso de acceso. Esto tiene sentido, pero hay momentos en los que es posible que desee que se muestren enlaces y vaya a una página de 'no está autorizado para ver este contenido' (por ejemplo, con fines de marketing).

¿Hay una manera fácil de mostrar estos enlaces? ¡Entiendo que las versiones anteriores de Drupal realmente requerían que descargaras un módulo para OCULTAR los enlaces a páginas no autorizadas!

¿Fue útil?

Solución 7

He encontrado un módulo que parece proporcionar la funcionalidad que quiero:

http: // blog .davereid.net / content / restrict-content-yet-another-different-drupal-node-access-module

Es realmente simple, solo agrega un selector dentro de cada página de creación de nodos donde puede elegir qué roles tendrán acceso a él. Cualquiera que no lo vea aún verá el enlace del menú, y esto llevará a una página personalizada "debe registrarse para ver esta". Lo instalé en un sitio de prueba de Drupal y parece funcionar bien; lástima que no lo encontré hace un par de semanas!

Otros consejos

Siempre ha sido así (al menos desde 4.7).

No puede mostrar elementos de menú no autorizados fuera de la caja. Sin embargo, puede haber un módulo especial ...

Lo que podría hacer es dejar que la página del menú apunte a una función que redirija a la página a la que desea que apunte su menú. Esto no es ideal en muchos sentidos, pero dado que todos pueden acceder a la función que realiza la redirección, esto debería funcionar. Simplemente puede poner este código en un módulo personalizado que cree.

No hay forma de hacer esto en el Drupal predeterminado, y no conozco ningún módulo contribuido que brinde esta funcionalidad.

Se me ocurren dos soluciones para hacer esto fácilmente .

  1. Con una codificación mínima es ocultar el elemento de menú real y hacerlo invisible, luego hacer una página con algún código PHP que redirija al elemento de menú adecuado si el usuario tiene acceso, y mostrar algún otro texto para las personas que no lo hagas Luego, haga un elemento de menú que apunte a su nodo.

  2. Implica más codificación, pero probablemente será más robusto. Simplemente haga su propio módulo básico con un hook_menu que tiene la verificación de acceso opuesto al real elemento de menú junto con una pequeña función de devolución de llamada de menú con el texto que desea mostrar a los usuarios sin privilegios.

Si desea hacer esto para muchos elementos del menú, debe encontrar una solución más flexible para administrarlo correctamente.

suponiendo que cada contenido es un nodo, puede mantener los menús sin reglas de acceso y luego usar

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

puede negar el acceso a ciertos nodos ..

espero que sea útil.

Eventualmente lo hice de una manera ligeramente diferente, creando una taxonomía para "abrir" o "restringido" contenido, y poner esto en el encabezado de mi 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 es una página que creé que contiene todos los formularios habituales de inicio de sesión / registro. ¡Parece que funciona bien para mí hasta ahora!

Nota: Si las personas deshabilitan deliberadamente la redirección en su navegador, no serán redirigidas, sin embargo, cuando intenté en Opera con la redirección apagué la página cargada hasta el punto donde la redirección intentaba sucede, y luego nada después de eso, por lo que el contenido aún estaba restringido en este caso.

Más o menos tarde, pero así es como lo resolví:

/**
 * 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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top