Drupal 7中的样式菜单块的菜单链接

时间:2012-03-09 12:54:37

标签: templates drupal hook drupal-themes

我正在尝试在Drupal 7中设置一个块,我很难搞清楚事情!

我已经使用menu_block模块从主菜单中获取所有链接。它生成一个带有ul链接的块,我想将其作为每个菜单树的div。

样式本身应该很容易,但我真的很难找到我应该用来设置主题的主题钩子/模板文件名。

我试图加入theme_menu_treetheme_menu_link,但是它们的主题方式太多了,我看不出我的样式。我尝试过menu-tree--menu-block--main-menu.tpl.php,但变量与我的需求完全不同。

我的想法是我需要在$content中设置block.tpl.php变量的样式,但我无法弄清楚如何为特定的块执行此操作。如果我想在显示块(块类型)时(在页脚中)设置菜单点的样式,我应该在哪里挂钩?

3 个答案:

答案 0 :(得分:2)

我认为hook_block_view_alter()

中最简单(不一定是最好)的地方
function MYMODULE_block_view_alter(&$data, $block) {
 if ($block->module == 'menu_block') {
    // Extract the links from the available data
    $links = element_children($data['content']['#content']);
    $content = '';

    // Loop through the links and build up the required output.
    foreach ($links as $link) {
      $content .= '<div class="something">' . l($link['#title'], $link['#href']) . '</div>';
    }

    // Assign the new output to the block content...done :)
    $data['content'] = $content; 
  }
}

Devel module和它的方便dpm()函数是你最好的朋友......他们会让你在标准消息区域中以一种结构合理的格式检查任何PHP变量。如果您还没有安装它,我建议这样做,这对于Drupal开发是绝对必要的。

一旦你实现了这个钩子,系统就不会忘记清除Drupal的缓存。

答案 1 :(得分:2)

我有一个非常类似的问题,试图找出如何正确命名我的模板和钩子。谷歌搜索没有帮助(太多的噪音),但最终我在drupal.org上尝试了Menu Block module documentation,它引导我朝着正确的方向......

模板:menu-block-wrapper--main-menu.tpl.php

<nav role="navigation" id="siteNavigation">
<?php echo render($content); ?>
</nav>

挂钩:THEMENAME_menu_tree__menu_block__MENUNAME()THEMENAME_menu_link__menu_block__MENUNAME()

function THEME_menu_tree__menu_block__main_menu($vars) {
    return '<ul class="my-custom-menu-wrapper">' . $vars['tree'] . '</ul>';
}

function THEME_menu_link__menu_block__main_menu($data) {

    $el = $data['element'];

    // ... render any classes or other attributes that need to go in this <li> 
    $attr = drupal_attributes($el['#attributes']);

    // ... render the menu link
    $link = l($el['#title'], $el['#href'], $el['#localized_options']);

    // ... and render any submenus
    $sub_menu = drupal_render($el['#below']);

    return sprintf("\n<li %s>%s %s</li>", $attr, $link, $sub_menu);
}

答案 2 :(得分:0)

使用print主题,您可以将CSS样式放入&lt; ul&gt;

print theme('links', array('links' => menu_navigation_links($your_menu_name), 'attributes' => array('class'=> array('ul_class')) ));
相关问题