如何在Drupal 6中“取消隐藏”菜单链接到未经授权的内容?

时间:2009-08-02 13:15:09

标签: drupal drupal-6

Drupal 6菜单模块隐藏了当前用户无权访问的内容的链接。这是有道理的,但有时您可能希望显示链接并转到“您无权查看此内容”页面(例如,用于营销目的)。

是否有一种简单的方法可以显示这些链接?据我所知,以前版本的Drupal实际上要求你下载一个模块来隐藏未经授权页面的链接!

7 个答案:

答案 0 :(得分:1)

一直都是这样(至少从4.7开始)。

您无法取消隐藏未经授权的菜单项。可能有一个特殊的模块......

答案 1 :(得分:1)

您可以做的是让菜单页面指向一个重定向到您希望菜单指向的页面的功能。这在许多方面并不理想,但由于所有人都可以访问执行重定向的功能,因此应该可以使用。您只需将此代码放入您自定义的模块中即可。

答案 2 :(得分:1)

在默认的Drupal中无法做到这一点,我不知道任何提供此功能的贡献模块。

很容易想到两个解决方案

  1. 最小的编码是隐藏真实的菜单项并使其不可见,然后创建一个页面,其中包含一些PHP代码,如果用户有权访问,则会重定向到正确的菜单项,并为人们显示其他文本别。然后只需创建一个指向您的节点的菜单项。

  2. 涉及更多编码,但可能会更强大。只需使用hook_menu创建自己的基本模块,该模块具有与真实菜单项相反的访问权限,以及带有要向非特权用户显示的文本的小菜单回调函数。

  3. 如果您想为许多菜单项执行此操作,应找到一些更灵活的解决方案来正确管理它。

答案 3 :(得分:1)

假设每个内容都是一个节点,您可以保留没有访问规则的菜单,然后使用

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

您可以拒绝访问某些节点..

希望这很有帮助。

答案 4 :(得分:1)

最后,我通过为“开放”或“限制”内容创建分类来做一个稍微不同的方式,并将其放在我主题的标题中:

<?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是我创建的一个页面,其中包含所有常用的登录/注册表单。到目前为止,它似乎对我来说还不错!

注意:如果人们故意在他们的浏览器中禁用重定向,他们将不会被重定向,但是当我在Opera中尝试重定向时,关闭页面加载到重定向尝试的点发生了,之后什么都没发生 - 因此在这种情况下内容仍受限制。

答案 5 :(得分:1)

有点迟到但这就是我如何解决这个问题的方法:

/**
 * 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;
}

答案 6 :(得分:0)

我发现了一个实际上似乎提供了我想要的功能的模块:

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

这很简单,它只是在每个节点创建页面中添加一个选择器,您可以在其中选择可以访问它的角色。任何没有的东西仍会看到菜单链接,这将导致自定义“你必须注册才能查看此页面”。我已将它安装在测试Drupal网站上,它似乎工作正常;惭愧我几周前没有找到它!