3

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

有没有一种简单的方法可以显示这些链接?我知道以前的 Drupal 版本实际上需要您下载一个模块来隐藏未经授权的页面的链接!

4

7 回答 7

1

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

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

于 2009-08-02T13:23:58.747 回答
1

您可以做的是让菜单页面指向一个函数,该函数重定向到您希望菜单指向的页面。这在很多方面并不理想,但因为所有人都可以访问执行重定向的函数,这应该可以工作。您可以将此代码放入您制作的自定义模块中。

于 2009-08-02T20:23:15.487 回答
1

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

想到两个解决方案来轻松做到这一点。

  1. 使用最少的编码是隐藏真正的菜单项并使其不可见,然后使用一些 PHP 代码创建一个页面,如果用户可以访问,该页面将重定向到正确的菜单项,并为没有访问权限的人显示一些其他文本。然后只需创建一个指向您的节点的菜单项。

  2. 涉及更多编码,但它可能会更健壮。只需使用hook_menu制作您自己的基本模块,该模块对真正的菜单项具有相反的访问权限检查,以及带有要显示非特权用户的文本的小菜单回调函数。

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

于 2009-08-03T20:44:55.683 回答
1

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

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

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

希望这会有所帮助。

于 2009-08-04T15:31:29.953 回答
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 中尝试使用重定向关闭页面加载到尝试发生重定向的点时,然后什么都没有 - 所以在这种情况下,内容仍然受到限制。

于 2010-12-16T10:33:03.667 回答
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;
}
于 2011-02-14T04:59:47.247 回答
0

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

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

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

于 2009-08-06T13:09:27.273 回答