动态灵活地显示二级菜单---将二级菜单放入区块中
显示当前激活的一级菜单下的二级菜单项,这是一个很常见的需求,例如像下面的菜单,当进入A menu及其子菜单时,其子菜单sub A menu 都显示出来;进入B menu及其子菜单时,其子菜单sub B menu 都显示出来,以此类推。
- A menu
- sub A menu
- sub A menu
- sub A menu
- B menu
- sub B menu
- sub B menu
- C menu
第一种方法是:
- 到“首页 » 管理 » 站点构建 » 菜单 » 设置”(/admin/build/menu/settings)将“次级菜单来源”设为“主导航链接”;
- Drupal 6.x默认的page.tpl.php模板(位于modules/system)中的139-143行即是你需要的输出,如下:
<?php if (!empty($secondary_links)): ?>
<div id="secondary" class="clear-block">
<?php print theme('links', $secondary_links, array('class' => 'links secondary-links')); ?>
</div>
<?php endif; ?>
你可以把这段代码写在任意区域(region)中,不过这样会有个问题:例如把其写在$left区域里面,那么此区块并不会显示,因为默认模板的$left区域仅在有内容的情况(即在区块管理里放入了区块)才会显示。当然你可以把此判断(<?php if (!empty($left)): ?>……<?php endif; ?>)删除,但会造成body的class不正确(没在区块管理里放入区块的话,body的class会是“no-sidebar”),这样不够严谨,而且对于编写css有时也会造成困扰。
更好的方法(将二级菜单放入区块中):
- 新建一个区块,区块说明随便你填写(只显示在区块管理界面)。区块标题留空。区块内容中填入“此区块为主题目录中的block-block-1.tpl.php所覆写!”,因为我们要用模板覆写的方式来输入php,当然你也可以开启phpfilter模块,并选择php的输入格式直接才此处输入,不过不推荐这么做;
- 用户、页面可见性等设置视你情况而定。然后保存并将此区块放入某个区域;
- 拷贝/moudles/system/block.tpl.php到你的主题目录下,并清空缓存。如果你的主题目录中已存在block.tpl.php,那么忽略这一步;
- 复制你主题目录下的block.tpl.php,并命名为block-block-1.tpl.php(注意:可能你的此区块的模板建议不是这个,模板建议的方式请参考 http://drupal.org/node/190815 或我之前的视频教程主题化-D-使用模板(block.tpl.php和其他)(视频) );
- 打开并编辑此模板,删除下面的代码:
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content">
<?php print $block->content ?>
</div> - 粘贴入如下代码保存即可:
<?php
$tree = menu_tree_page_data("primary-links");
foreach($tree as $link_data){
if($link_data['link']['in_active_trail']){
if(!empty($link_data['below'])){
print '<h2 class="title">' . $link_data['link']['link_title'] . '</h2>';/*把父菜单项作为区块标题*/
print (menu_tree_output($link_data['below']));/*子菜单项*/
}
}
}
?>









猫哥,那要是动态灵活地显示三级菜单---将三级菜单放入区块
猫哥,那要是动态灵活地显示三级菜单---将三级菜单放入区块中,这个怎么实现呢?
menu
menu block模块,请看下面的回复
http://xdrupal.org/placing-sub-menus-into-block#comment-1419
真的不错啊,谢谢分享了 佳吉快运
真的不错啊,谢谢分享了
佳吉快运
第3种办法: 最好的办法,只需要简单的配置,够傻瓜
第3种办法:
最好的办法,只需要简单的配置,够傻瓜
http://drupal.org/project/menu_block
menu_block的确不错,感谢分享:)
menu_block的确不错,感谢分享:)
顶
顶
发表新评论