3

我正在寻找一种在特定条件下为匿名用户隐藏特定菜单项的方法。特别是,我在几个子域上为附属公司提供网站,对于某些子域(附属公司),我想隐藏指向我的“关于我们”页面的链接,该页面出现在几个菜单中。

我并不太担心完全拒绝访问“关于我们”节点,但我很欣赏这可能是探索的一种途径。

到目前为止,我已经看过: * hook_menu_alter 但这仅在重建菜单树时调用,而且我看不到如何仅为特定匿名会话删除项目。* template_preprocess_menu_link :可能,但我如何告诉项目不要渲染。我可以向隐藏它的菜单项添加一个类,不是特别好,但它会起作用。* hook_node_access :看不到我将如何阻止仅此会话的访问。

欢迎任何想法或指示。

[编辑]为了跟进这一点,我有一个可行的解决方案,但我一点也不为此感到自豪,一定有更好的方法。我正在使用 'hidden' 类向列表项添加一个 css 'display:none' 属性。

function sil_affiliate_preprocess_menu_link(&$variables) {
  $affiliate = get_affiliate_from_session();

  if ($affiliate && !$affiliate->show_aboutus) {
    $real_path = drupal_lookup_path('source','customerservice/aboutus');    
    if ($variables['element']['#original_link']['link_path'] == $real_path) {
      $variables['element']['#attributes']['class'][] = 'hidden';
    }
  }
}

:wq 全家福。

4

1 回答 1

1

您可以在自定义模块中使用以下代码示例。它实现了hook_node_access(未测试)

function [YOUR_MODULE]_node_access($node, $op, $account)
{
    if($account->uid == 0 && $op == "view" && $node->nid == 15)
    {
        return NODE_ACCESS_DENY;
    }
}

希望这行得通……穆罕默德。

于 2012-10-18T13:40:03.817 回答