thincmf 导航与当前页面内容怎么关联,二级页获取当前导航id,显示子导航

djiz / 2023-07-04 / 原文

thincmf 二、三级页面侧面子导航怎么获取?导航链接最终打开的是url链接,链接中只带了文章分类信息,并没有导航信息,如何在二页面判断是点击哪个导航打开的??

如何高亮当前栏目,如何获取当前栏目的二级导航???

 

如果不用通用模版,每个栏目一个模版,那么可以这样:

<php>
$parent_nav_menu_id=6;
</php>
<subNavigation parent="$parent_nav_menu_id" root="ul" id="main-navigation" class="nav navbar-nav navbar-nav-custom">
    <subNavigationMenu root="li" class="menu-item">
        <a href="{$menu.href|default=''}" target="{$menu.target|default=''}">{$menu.name|default=''}</a>
    </subNavigationMenu>
    <subNavigationFolder root="li" class="dropdown dropdown-custom" dropdown="ul" dropdown-class="dropdown-menu">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
            {$menu.name|default=''}<span class="caret"></span>
        </a>
    </subNavigationFolder>
</subNavigation>

 

如果不同栏目使用通用模版 list.html    article.html  page.html

nav表中 href 字段存储  list  {"action":"portal\/List\/index","param":{"id":1}}      page  {"action":"portal\/Page\/index","param":{"id":1}}

list和article里 可以根据当前catid 去nav表查询属于哪个导航,然后查找顶级导航

like ‘:10}’  && like ‘List’    或者组合成字符串 {"action":"portal\/List\/index","param":{"id":xx}} 然后再查询。

page里 没有catid,需要通过文章id去查询属于哪个导航

/*根据catid返回相关导航信息
    返回:array[rootid,rootname,currentid,currentname,subnav]
  */
  function getnav($where){
       
       if($where){ 
        $nav=Db::name('nav_menu')->where('href',$where)->find(); //有可能有多个? 
        $currentid=$nav["id"];
        $currentname=$nav["name"];
        $rootid=$nav["parent_id"]==0?$currentid:$nav["parent_id"];
        $rootname=$nav["parent_id"]==0?$currentname:getnavname($rootid);
        $subnav=Db::name('nav_menu')->where('parent_id',$rootid)->select();
        return ["currentid"=>$currentid,"currentname"=>$currentname,"rootid"=>$rootid,"rootname"=>$rootname,"subnav"=>$subnav];
       }else{
           return ["currentid"=>"","currentname"=>"","rootid"=>"","rootname"=>"","subnav"=>[]];
       }
       
  }

  function getlistnav($catid){
    return getnav($catid?'{"action":"portal\/List\/index","param":{"id":'.$catid.'}}':'');
  }

  function getpagenav($id){
      return getnav($id?'{"action":"portal\/Page\/index","param":{"id":'.$id.'}}':'');
  }

  function getnavroot($navid){

  }

  function getnavname($navid){ 
      $nav=Db::name('nav_menu')->where('id',$navid)->find();
      if($nav){return $nav["name"];}
      return "";
  }

直接通过subnav显示子导航不行 vo.href 不能正确获取。需要使用以下方法显示子导航。

<php>
        $nav=getlistnav($category["id"]); 
        $submenus = $navMenuModel->subNavMenusTreeArray($nav["rootid"]);
    </php>
   <volist name="$submenus" id="vo">
                  <li class="<if $nav["currentid"]==$vo.id>current</if>"><a href="{$vo.href}" class="" target="{$vo['target']}">{$vo.name}</a>
</volist> 

 

 还可以使用 $nav["rootid"] 来高亮导航菜单。

导航菜单显示时 <li data-id=导航id ,然后在获取到$nav["rootid"]后通过JavaScript 给相应导航addclass 。

或者 把  $nav=getlistnav($category["id"]); 放到头部显示导航之前 ,然后<if $nav["rootid"] ==$vo.id>class=.....