平时用thinkcmf网站开发经常需要导航点击之后高亮,就写了一些实现方法分享一下。
思路很简单,先获取当前页面的*栏目的地址,然后与导航中的地址比较,相同的就加上一个class,把下面函数理解了不管一级、二级、三级都能做。
1、添加函数
/*获取当前栏目的*栏目地址适用2级栏目*/
function _get_top_url($c,$id){
$arr['href']['action']="Portal/".$c."/index";
$arr['href']['param']['id']=$id;
$nav=M('nav');
$rs=$nav->select();
foreach($rs as $k=>$v){
$rs[$k]['href']=unserialize(stripslashes($v['href']));
} foreach($rs as $k=>$v){
if($v['href']==$arr['href']){
$a=$v;
}
}
if($a['parentid']==0){
$href=$a['href'];
}else{
$id=$a['parentid'];
$result=$nav->find($id);
$href=unserialize(stripslashes($result['href']));
} if($href){
$href=leuu($href['action'],array('id'=>$href['param']['id']));
$default_app=strtolower(C("DEFAULT_MODULE"));
$g=C("VAR_MODULE");
$href=preg_replace("/\/$default_app\//", "/",$href);
$href=preg_replace("/$g=$default_app&/", "",$href);
}else{
$href="/";
}
/*去除g=Portal*/
//判断URL模式
if( preg_match ( '/php\?g=/' , $href ) ){
$href = preg_replace ( '/g=Portal\&/' , '' , $href );
}else{
$href = preg_replace ( '/Portal\//' , '' , $href );
}
/*转化为小写*/
$href = strtolower($href);
return $href;
}
2、模板调用
<php>
/*获取主导航*/
$menu=sp_get_menu_tree(1);
/*获取当前页面的*栏目的地址*/
if(CONTROLLER_NAME=="Article"){
$url=get_top_url("List",$term_id);
}else{
$url=get_top_url(CONTROLLER_NAME,$_GET['id']);
}
//上传到服务器时,可删除下面行,为了本地测试所用 http://localhost/gupiao/
//$url = '/gupiao' . $url;
</php>
<volist name="menu" id="vo" key="k">
/*判断当前页面的*栏目的地址$url与导航中的链接$vo["href"]是否一样*/
<li class="n1 <eq name='url' value='$vo["href"]'>selected_u</eq>">
<a href="{$vo['href']}" target="{$vo['target']}">{$vo['label']}</a>
<notempty name="vo['child']">
<ul class="navMoreUL">
<volist name="vo['child']" id="v">
<li><a href="{$v['href']}" target="{$v['target']}">{$v['label']}</a></li>
</volist>
</ul>
</notempty>
</li>
</volist>