获取一个节点以显示在View的菜单项下面

时间:2009-08-11 20:53:07

标签: drupal views

所以我有一个内容类型的“新闻”,然后是一个视图,它将一个新闻节点列表显示为一个菜单项。

当您查看新闻节点时,有没有办法在菜单树中突出显示新闻视图?

我有点意识到为什么这不起作用,以及为什么这样做可能是hacky,但必须有一种方法来拥有一个“默认”菜单项或节点可以显示的东西。

4 个答案:

答案 0 :(得分:1)

实际上,我发现了一个基本上与上面的template.php相同的模块,允许你按内容类型分配默认菜单项。

它被称为Menu Trails。以下是项目页面的摘录:

  

...为Drupal的菜单系统添加了一些常识可用性

     
      
  • 菜单路径实现主要/辅助链接,使当前菜单跟踪“活动”或突出显示。随附一个准备进入template.php的便捷代码段。
  •   
  • 该模块提供了一种将节点(按类型或分类)广泛分类为落在已知菜单项“下”的方法。这些节点不会添加到菜单树中(使菜单管理系统保持理智),但它们将在查看时触发上述功能 - 保留用户的导航状态。
  •   
  • 6.0新功能:菜单路径还可以为节点设置面包屑,使其与路径保持同步。
  •   
  • 适用于6.0的新功能:菜单路径现在可以识别有机组,因此可以指定节点位于其所属的第一个组节点“下方”。
  •   
  • 6.0新功能:令牌暴露给pathauto(以及其他令牌识别模块),允许在自动路径别名创建中使用菜单跟踪。
  •   

答案 1 :(得分:0)

假设我上面评论的答案是“是”,这是你可以通过主题文件夹中的template.php文件完成的事情

最终解决方案取决于您的设置,但通常大部分操作都会在phptemplate_preprocess_page

内进行
// Simplified, and untested in this form
    function phptemplate_preprocess_page(&$vars) {                        
      if (isset($vars['node'])) { // if we're looking at a node
        $body_classes[] = (($vars['node']->type == 'News') || (arg(0) == 'News')) ? 'news_page' : '';             // Page is news page
      }
      else if (arg(0) == 'taxonomy') {
        // ... Special handling for news taxonomy pages, if you want
      } else {
        $body_classes[] = "page-type-" . arg(0);
      }
      $body_classes = array_filter($body_classes); // Out! Out! Damn empty elements!
      $vars['body_classes'] = implode(' ', $body_classes);  
    }

这将为您提供body.news_page样式类,您可以将其与新闻菜单块的样式相结合,使其显示您喜欢的样式。

答案 2 :(得分:0)

如果Menutrails不起作用(对我来说没有),你可以通过以下方式自己做:

$somenode = menu_get_item('node/5');

menu_set_item($somenode);

答案 3 :(得分:0)

如果你在hook_nodeapi()中做了类似的事情,我发现你有更多的控制权。

// this code worked for me
$somenode = menu_get_item();
$somenode['href'] = 'node/5';
menu_set_item(NULL, $somenode);

您可能需要将自定义模块的重量设置为比核心模块更重:至少1