欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Drupal模板中调用自定义菜单的方法 得到菜单变量

shiping1 的头像
其实自定义菜单本身是一个区块了 把它放到区块中就可以了

Drupal的 menu 系统提供了强大的自定义菜单功能。在开发时,可以根据项目需求,添加一些功能菜单。这些定义的菜单可以在区块配置,放置到不同的位置。但如果想在主题中通过程序调用有什么方法呢?Drupal 系统自带的菜单是这样调用的:
code
1
2
3
4
5
<?php if (!empty($primary_links) || !empty($secondary_links)): ?>
    <div id="navigation"><div class="section">
       <?php if (!empty($primary_links)){ print theme('links', $primary_links, array('id' => 'primary', 'class' => 'links main-menu')); } ?>
          </div></div> <!-- /.section, /#navigation -->
  <?php endif; ?>

但是,使用这样的方法调用自定义的菜单是不行。

现在以本站为例来说明一下调用的方法:

萃图网站当前的主题名称为:cuitu_net ;创建自定义的菜单名称为:menu-utility (注:在添加菜单admin/build/menu/add时,只要在菜单标题:项输入“utility”就可以了,“menu-”是Drupal自动添加的)。

具体方法:

在当前主题的 template.php 文件添加(如果已经有这相函数,则无需再添加)一个 function cuitu_net_preprocess_page(&$vars, $hook) { }函数,然后在函数中添加如下代码:

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function cuitu_net_preprocess_page(&$vars, $hook) {
   //添加个自定义菜单变量
  //我们对已登录和未登录用户分别进行了缓存,提高网站性能。
  global $user;
  $menu_utility_cache = $user->uid ? cache_get("menu_utility") : cache_get("menu_utility_anon") ;
  if($menu_utility_cache) {
    $menu_utility = $menu_utility_cache->data;
  }
  else {
    $menu_utility = menu_navigation_links('menu-utility');
    if ($user->uid) {
      foreach($menu_utility as $key => $item) {
        if ($item['href'] == 'user') {
        $menu_utility[$key]['title'] ='我的帐号';
        }
      }
    }
    $attributes array(
          'id' => 'user-menu',
          'class' => 'links'
        );
    $menu_utility = theme('links',$menu_utility, $attributes);
    cache_set( $user->uid ? "menu_utility" : "menu_utility_anon" , $menu_utility);
  }
  $vars['menu_utility'] = $menu_utility;
}

然后在主题文件中调用 $menu_utility 变量即可,如下:

code
1
<?php print $menu_utility; ?>
来自 http://www.cuitu.net/content/drupalmo-ban-zhong-diao-yong-zi-ding-yi-cai-dan-de-fang-fa
普通分类: