动态灵活地显示二级菜单---将二级菜单放入区块中

无须猫 的头像
6条评论发表评论6.xAttribution

显示当前激活的一级菜单下的二级菜单项,这是一个很常见的需求,例如像下面的菜单,当进入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

第一种方法是:

  1. 到“首页 » 管理 » 站点构建 » 菜单 » 设置”(/admin/build/menu/settings)将“次级菜单来源”设为“主导航链接”;
  2. 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有时也会造成困扰。

 

更好的方法(将二级菜单放入区块中):

  1. 新建一个区块,区块说明随便你填写(只显示在区块管理界面)。区块标题留空。区块内容中填入“此区块为主题目录中的block-block-1.tpl.php所覆写!”,因为我们要用模板覆写的方式来输入php,当然你也可以开启phpfilter模块,并选择php的输入格式直接才此处输入,不过不推荐这么做;
  2. 用户、页面可见性等设置视你情况而定。然后保存并将此区块放入某个区域;
  3. 拷贝/moudles/system/block.tpl.php到你的主题目录下,并清空缓存。如果你的主题目录中已存在block.tpl.php,那么忽略这一步;
  4. 复制你主题目录下的block.tpl.php,并命名为block-block-1.tpl.php(注意:可能你的此区块的模板建议不是这个,模板建议的方式请参考 http://drupal.org/node/190815 或我之前的视频教程主题化-D-使用模板(block.tpl.php和其他)(视频) );
  5. 打开并编辑此模板,删除下面的代码:
    <?php if ($block->subject): ?>
      <h2><?php print $block->subject ?></h2>
    <?php endif;?>

      <div class="content">
        <?php print $block->content ?>
      </div>
  6. 粘贴入如下代码保存即可:
    <?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

l华宇物流 的头像

真的不错啊,谢谢分享了   佳吉快运

真的不错啊,谢谢分享了

 

佳吉快运

游客 的头像

第3种办法: 最好的办法,只需要简单的配置,够傻瓜

第3种办法:

最好的办法,只需要简单的配置,够傻瓜

 

http://drupal.org/project/menu_block

无须猫 的头像

menu_block的确不错,感谢分享:)

menu_block的确不错,感谢分享:)

杨皮狼 的头像

发表新评论

此内容将保密,不会被其他人看见。
  • 自动将网址与电子邮件地址转变为链接。
  • 允许HTML标签:<a> <p> <span> <div> <h1> <h2> <h3> <h4> <blockcode> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <tr> <td> <em> <b> <u> <i> <strong> <font> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike> <caption>
  • 自动断行和分段。
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <as>, <as3>, <asp>, <css>, <drupal5>, <drupal6>, <html>, <js>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

更多关於格式化选项的信息

CAPTCHA
请输入问题的答案。
Fill in the blank