分享

dedecms二级菜单的实现

 昵称13133320 2013-07-19
  现在基于web2.0的下拉菜单 多是以
   
    <ul>
   
    <li>
   
    <a>一级菜单</a>
   
    <ul>
   
    <li>
   
    <a>二级级菜单</a>
   
    </li>
   
    </ul>
   
    </li>
   
    </ul>
   
    这样的格式来实现的。但是dede的{dede:channel}标签是无法实现这个效果的,或者只有添加typeid这个参数来手工实现下拉菜单,这样的效果耗时耗力。
   
    于是觉得只有改底层模板来实现了,高了一个小时以后增加了标签
   
    {dede:channeli row='' type='top'}
   
    {typelink:root}<li><a href="[field:typelink/]">[field:typename/]</a><ul>[field:child/]</ul></li>{/typelink:root}
   
    {typelink:children}<li><a href="[field:typelink/]">[field:typename/]</a></li>{/typelink:children}
   
    {/dede:channeli}
   
    其实就是一个嵌套的标签
   
    {typelink:root}<li><a href="[field:typelink/]">[field:typename/]</a><ul>[field:child/]</ul></li>{/typelink:root}
   
    是父菜单的innertext
   
    {typelink:children}<li><a href="[field:typelink/]">[field:typename/]</a></li>{/typelink:children}
   
    是子菜单的innertext
   
    由于系统的消耗,目前就支持两级 ,其实已经够用了!
   
    这里相信大家已经看懂了思路了,下面就是修改办法:
   
    include/inc_typelink.php
   
    增加函数:
   
    function GetChanneli($typeid=0,$reID=0,$row=8,$typetype='sun',$innertext='',$myinnertext='')
   
    {
   
    if($typeid==0) $typeid = $this->TypeID;
   
    if($row=="") $row = 8;
   
    if($reID=="") $reID = 0;
   
    if($col=="") $col = 1;
   
    if($typetype=="") $typetype="sun";
   
    if($innertext=="") $innertext = GetSysTemplets("channel_list.htm");
   
    if($reID==0 && $typeid>0){
   
    $dbrow = $this->dsql->GetOne("Select reID From #@__arctype where ID='$typeid' ");
   
    if(is_array($dbrow)) $reID = $dbrow['reID'];
   
    }
   
    $likeType = "";
   
    if($typetype=="top"){
   
    $sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
   
    From #@__arctype where reID=0 And ishidden<>1 order by sortrank asc limit 0,$row";
   
    }
   
    else if($typetype=="sun"||$typetype=="son"){
   
    $sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
   
    From #@__arctype where reID='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
   
    }
   
    else if($typetype=="self"){
   
    $sql = "Select ID,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl
   
    From #@__arctype where reID='$reID' And ishidden<>1 order by sortrank asc limit 0,$row";
   
    } //扩展二级菜单
   
    //主菜单的innertext
   
    $root="";
   
    //带有子菜单的innertext
   
    $rootc="";
   
    //子菜单的innertext
   
    $children="";
   
    $dtp3 = new DedeTagParse();
   
    $dtp3->SetNameSpace("typelink","{","}");
   
    $dtp3->LoadSource($innertext);
   
    if(is_array($dtp3->CTags))
   
    {
   
    foreach($dtp3->CTags as $tagid=>$ctag )
   
    {
   
    $tagname=$ctag->GetName();
   
    if($tagname=="root")
   
    {
   
    $root=$ctag->GetInnerText();
   
    }
   
    else if($tagname=="rootc")
   
    {
   
    $rootc=$ctag->GetInnerText();
   
    }
   
    else if($tagname=="children")
   
    {
   
    $children=$ctag->GetInnerText();
   
    }
   
    }
   
    }
   
    $dtp2 = new DedeTagParse();
   
    $dtp2->SetNameSpace("field","[","]");
   
    $dtp2->LoadSource($root);
   
    $dsqli=new DeDeSql(fasle);
   
    $dsqli->SetQuery($sql);
   
    $dsqli->Execute();
   
    $line = $row;
   
    for($i=0;$i<$line;$i )
   
    {
   
    if($row=$dsqli->GetArray())
   
    {
   
    if($typetype=="self" && $row['ID']=="$typeid"){
   
    if($myinnertext!=''){
   
    $linkOkstr = $myinnertext;
   
    $row['typelink'] = $this->GetOneTypeUrl($row);
   
    $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
   
    $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
   
    $likeType .= $linkOkstr;
   
    }
   
    }else{
   
    //
   
    $row['child']=$this->GetChannelList($row['ID'],0,18,$typetype='sun',$children,0,100,'','');
   
    //
   
    $row['typelink'] = $this->GetOneTypeUrl($row);
   
    if(is_array($dtp2->CTags)){
   
    foreach($dtp2->CTags as $tagid=>$ctag)
   
    { if(isset($row[$ctag->GetName()])) $dtp2->Assign($tagid,$row[$ctag->GetName()]); }
   
    }
$likeType .= $dtp2->GetResult();
   
    }
   
    }
   
    $GLOBALS['autoindex'] ;
   
    }
   
    $this->dsql->FreeResult();
   
    return $likeType;
   
    }//GetChannel
   
    在inc_archives_view.php,inc_arclist_view.php,inc_arcpart_view.php增加标签的解析
   
    else if($tagname=="channeli"){
   
    //获得栏目连接列表
   
    if(trim($ctag->GetAtt('typeid'))=="" && $this->TypeID!=0){
   
    $typeid = $this->TypeID;
   
    $reid = $this->TypeLink->TypeInfos['reID'];
   
    }
   
    else{
   
    $typeid = $ctag->GetAtt("typeid"); $reid=0;
   
    }
   
    $this->dtp->Assign($tagid,
   
    $this->TypeLink->GetChanneli($typeid,$reid,$ctag->GetAtt("row"),
   
    $ctag->GetAtt("type"),$ctag->GetInnerText(),"")
   
    );
   
    }
   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约