我正在尝试在Drupal 7中设置一个块,我很难搞清楚事情!
我已经使用menu_block模块从主菜单中获取所有链接。它生成一个带有ul链接的块,我想将其作为每个菜单树的div。
样式本身应该很容易,但我真的很难找到我应该用来设置主题的主题钩子/模板文件名。
我试图加入theme_menu_tree
和theme_menu_link
,但是它们的主题方式太多了,我看不出我的样式。我尝试过menu-tree--menu-block--main-menu.tpl.php
,但变量与我的需求完全不同。
我的想法是我需要在$content
中设置block.tpl.php
变量的样式,但我无法弄清楚如何为特定的块执行此操作。如果我想在显示块(块类型)时(在页脚中)设置菜单点的样式,我应该在哪里挂钩?
答案 0 :(得分:2)
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')) ));