在Drupal 7中隐藏特定引用者的菜单链接

时间:2012-10-18 08:42:34

标签: drupal drupal-7 drupal-modules

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

我并没有过分担心完全拒绝访问“关于我们”节点,但是要明白这可能是一个可以探索的途径。

到目前为止,我看过: * 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 Familymangreg。

1 个答案:

答案 0 :(得分: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;
    }
}

希望这有效......穆罕默德。