2011-04-07 68 views
1

全部。这个问题可能有一个非常简单的答案,但它让我占领了几个小时。Drupal 7 - 菜单到UL

我有我的主菜单,它是我正在建设的Drupal站点的相应块。像所有其他Drupal菜单一样,它包含一系列链接到网站的各个部分。我可以将它的块分配给一个区域,并且菜单链接出来都很好,并且使用标题和小项目点进行格式化。问题是,我正在为这个网站制作一个自定义的主题,我需要能够在没有添加任何垃圾的情况下使用链接,最好是像ul这样简单的东西。

是否有任何函数需要一个菜单​​并产生一个包含所有链接的ul?

也许有一些方法可以减少菜单的块到ul。

我一直在试验theme_menu_tree(...)theme(...)无济于事。

谢谢!

回答

0

您可以拨打menu_build_tree并查看它的输出并从中构建一个ul。但是,尽管默认菜单输出具有“cruft”负载,但它是一个ul,并且应该可以用CSS进行主题化。

如果你真的想建立自己的菜单,我会反向工程的另一个模块,这样做就像Nice Menus

+0

好吧,我试过''并且会导致SQL语法的巨大错误»'PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; )检查对应于您的MySQL服务器版本的手册,以找到正确的语法以在'')附近使用)ORDER BY p1 ASC,p2 ASC,p3 ASC,p4 ASC,p5 ASC,p6 ASC,p7 ASC,p8 ASC,p9'at line 2:'** TRUNCATED **'(ml.menu_name IN())ORDER BY p1 ASC,p2 ASC,p3 ASC,p4 ASC,p5 ASC,p6 ASC,p7 ASC,p8 ASC,p9 ASC; _menu_build_tree()中的Array()(/var/www/includes/menu.inc的第1370行)。' – enthdegree 2011-04-08 00:05:17

+0

好吧,我已决定按照您的建议分块切块输出。它不是很优雅或漂亮,它增加了页面加载,但它现在可以工作,直到我能找到更好的东西。 – enthdegree 2011-04-08 18:05:39

2

我发现你可以做通过CSS<H2>标题设置为display: none和设置<LI>最变化对于水平导航栏,标记为float: left


但是...如果你想从Drupal的数据建立自己的菜单,这里是我工作的一个网站一些代码。它建立了一个两级菜单。如果您需要,我相信您可以进一步简化此代码。

//----------- primary menu (horizontal with drop-downs) ------------------------- 

$params = array('max_depth' => 3); 
$menu = menu_build_tree('main-menu', $params); 
$variables['menu'] = $menu; 

$html = '<ul>'; 

foreach($menu as $item_menu) { //for each main element 

    $isSecondLevel = isset($item_menu['below']) && !empty($item_menu['below']); 

    if ($isSecondLevel) { 
     $html.= '<li>'; 
    } else { 
     $html.= '<li class="sg">'; 
    } 

    $html.= '<a class="topLevel" href="'.url($item_menu['link']['link_path']).'">';   
    $html .= $item_menu['link']['link_title']; 
    $html .= '</a>'; 

    //is there any sub elements to display 
    if ($isSecondLevel) { 
     $html.= '<ul>'; 

     foreach($item_menu['below'] as $item_submenu) { //for each sub element 
      $isThirdLevel=isset($item_submenu['below']) && ! empty($item_submenu['below']) ? 'main-menu-third_level' : ''; 

      $html.= '<li>'; 
      $html.= '<a href="'.url($item_submenu['link']['link_path']).'">'; 

      $html.= $item_submenu['link']['link_title']; 

      $html.= '</a>'; 
      $html.= '</li>'; 
     } 
     $html.= '</ul>';  
    } 
    $html.= '</li>'; 
} 
$html.= '</ul>'; 
$variables['main_menu_html'] = $html; 

此代码被放在function pinkribbon_process_page(&$variables)template.php之内。菜单通过致电<?php echo $main_menu_html ?>

Simon打印。

P.S.其他人,请随时编辑这个代码清晰/简单。

1

我建议你使用

menu_tree_output 

是这样的:

print render(menu_tree_output(menu_build_tree('main-menu', $parameters))); 
+0

这是用于Drupal 7 – redfog 2012-11-04 14:52:46

+0

哇,更干净!谢谢你。 – enthdegree 2012-11-08 19:18:55