当前位置: 首页 > 工具软件 > Superfish > 使用案例 >

利用superfish显示到内容页并高亮显示菜单项

聂建茗
2023-12-01

区块中显示superfish菜单

显示到内容页面可以先利用pathauto定制路径,利用路径的不同来筛选block的显示。

我定制的路径为

v/[term:vocabulary:vid]/t/[term:tid]

v/[node:field-service-fenlei:vocabulary:vid]/t/[node:field-service-fenlei:tid]/[node:nid]

在block中添加v/8/*,筛选出来即可

高亮指定菜单项

superfish实现了钩子hook_superfish_active_trail_alter来让其他模块更改active_trail这个class的显示位置
可以在模块的my_module.module中这样写:
function my_module_superfish_active_trail_alter(&$trail){}

也可以在模板的template.php中这样写
function bootstrap_subtheme_superfish_active_trail_alter(&$trail){}

调用的都是一样的
只需找到菜单项的$mlid,更改$trail的值即可。

在内容页面 我是这样写的:
function my_module_superfish_active_trail_alter(&$trail){
      if ($node = menu_get_object()) {
        // Get the nid
        $tid =$node->field_service_fenlei['und'][0]['tid'];
        $links = menu_load_links('main-menu');
        // dpm($links);
        if($tid == 25){
          $trail[0] =  742;
        }
        if($tid == 26){
          $trail[0] =  745;
        }
        if($tid == 27){
          $trail[0] =  744;
        }
        if($tid == 28){
          $trail[0] =  743;
        }
        if($tid == 29){
          $trail[0] =  746;
        }
      }

}

先找到当前node,在找到当前的tid,再找对应的菜单项的mild,最后手动对应起来


更改superfish的css 我用的皮肤是spring:
.sf-menu.sf-style-spring li.active-trail {
  background-color: #428bca;
}
.sf-menu.sf-style-spring li.active-trail a {
  color: white;
}
.sf-menu.sf-style-spring li.active-trail a:hover {
  color: #2a6496;
}



更多相关阅读

官网上有利用url的例子:
/**
 *  Implementation of hook_superfish_active_trail_alter().
 */
function mymodule_superfish_active_trail_alter(&$trail){
  global $language;
  $request_uri = request_uri();
  if (strpos($request_uri, '/') === 0){
    $request_uri = substr($request_uri, 1);
  }
  $uri_parts = explode('/', $request_uri);
  switch ($uri_parts[0]) {
    case 'resources':
      if ($language->language == 'en') {
        $trail = array(697);
      }
      else {
        $trail = array(1483);
      }
      break;
    case 'workareas':
      if ($language->language == 'en') {
        $trail = array(759);
      }
      else {
        $trail = array(911);
      }
      break;
    case 'countries':
      if ($language->language == 'en') {
        $trail = array(758);
      }
      else {
        $trail = array(1482);
      }
      break;
    default:
      break;
  }
}

而简单的写法就是下面的例子:

/**
 * Impelement hook superfish_active_trail
 * @param $trail The current active trail
 */
function THEME_superfish_active_trail_alter(&$trail) {
    if (count($trail) == 0) {
        $links = menu_load_links('main-menu');
        $trail[0] = $links[0]['mlid'];
    }
}


高亮显示的另一种写法:

function my_module_node_view($node, $view_mode, $langcode) {
  
  $tid =$node->field_service_fenlei['und'][0]['tid'];

  if($node->type == 'fuwuliebiao' && $view_mode == 'full'){
    menu_set_active_item('taxonomy/term/'.$tid);
  }


}

在node页面显示时调用这个钩子,它利用了函数menu_set_active_item,在里面添加一个路径参数,不能是别名,要用实际路径,其实就是在渲染是为菜单模块传入了我们自己指定的路径,欺骗了这个菜单,让它按照我们需要的显示,但是这个与面包屑模块有点儿冲突,所以没有用,以后可以在单页面是用这个函数。


显示当前node

两种方法
if ($node = menu_get_object()) {
  // Get the nid
  $nid = $node->nid;
}
or

if (arg(0) == 'node' && is_numeric(arg(1))) {
  // Get the nid
  $nid = arg(1);

  // Load the node if you need to
  $node = node_load($nid);
}










 类似资料: