0

我正在尝试在 Drupal 7 中设置一个块的样式,但我很难弄清楚!

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

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

我尝试过使用theme_menu_treeand theme_menu_link,但是它们的主题太多了,而且我看不到我在设计什么。我试过menu-tree--menu-block--main-menu.tpl.php了,但变量与我需要的完全不同。

我的想法是我需要为$content变量设置样式block.tpl.php,但我不知道如何为特定块做。如果我想在块(块类型)显示(在页脚中)时设置菜单点的样式,我应该在哪里挂钩?

4

3 回答 3

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 模块及其方便的功能dpm()是您最好的朋友……它们可以让您在标准消息区域中以结构良好的格式检查任何 PHP 变量。如果您还没有安装它,我建议您这样做,这对于 Drupal 开发来说是绝对必须的。

一旦你实现了那个钩子,不要忘记清除 Drupal 的缓存,否则系统不会拾取它。

于 2012-03-09T14:11:02.820 回答
2

我有一个非常相似的问题,试图弄清楚如何正确命名我的模板和钩子。谷歌搜索没有帮助(噪音太大),但最终我尝试了drupal.org 上的菜单块模块文档,它引导我朝着正确的方向前进......

模板: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);
}
于 2013-06-13T15:47:55.297 回答
0

使用打印主题,您可以将 CSS 样式放入 <ul>

print theme('links', array('links' => menu_navigation_links($your_menu_name), 'attributes' => array('class'=> array('ul_class')) ));
于 2015-03-04T13:52:16.660 回答