区块中显示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);
}