欢迎光临亮剑seo论坛!亮剑问答平台

亮剑seo论坛 > 织梦教程 > 正文

织梦教程:巧用sonchannel标签做三级菜单!

亮剑seo论坛 2019-12-04 织梦教程 未知

  导读:织梦怎么做三级菜单,这可能是很多人遇到过的问题,织梦确实不太好做三级菜单,今天老九就教大家一招巧用sonchannel标签做三级菜单

   关键词:织梦建站教程

   作者:老九

   一、修改文件:\include\taglib目录下的channel.lib.php

   <?php
function lib_channel($ctag,$refObj)
{
global $_sys_globals,$envs,$dsql;
$attlist = typeid0,reid0,row100,col1,typeson,currentstyle;
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = $ctag->GetInnerText();
$cacheid = trim($cacheid);
if($cacheid !=) {
$likeType = GetCacheBlock($cacheid);
if($likeType != ) return $likeType;
}

   $reid = 0;
$topid = 0;
if(empty($typeid) $envs[typeid]!=0)
{
$typeid = $envs[typeid];
$reid = $envs[reid];
}else{
$reid=0;
}
if($type==$type==sun) $type=son;
if($innertext==) $innertext = GetSysTemplets(channel_list.htm);
if($reid==0 $typeid>0)
{
$dbrow = $dsql->GetOne(Select reid From dede_arctype where id=$typeid );
if(is_array($dbrow)) $reid = $dbrow[reid];
}
$likeType = ;
if($type==top)
{
$sql = Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row;
}
else if($type==son)
{
//if($_sys_globals[typeid]>0) $typeid = $_sys_globals[typeid];
if($typeid==0) {
return ;
}
$sql = Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From dede_arctype where reid=$typeid And ishidden<>1 order by sortrank asc limit 0,$row;
}
else if($type==self)
{
if($reid==0) {
return ;
}
$sql = Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From `dede_arctype` where reid=$reid And ishidden<>1 order by sortrank asc limit 0,$row;
}
//And id<>$typeid
$needRel = false;
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace(field,[,]);
$dtp2->LoadSource($innertext);
$dsql2 = clone $dsql;
$dsql->SetQuery($sql);
$dsql->Execute();
$line = $row;
//检查是否有子栏目,并返回rel提示(用于二级菜单)
if(ereg(:rel, $innertext)) $needRel = true;

   if(empty($sql)) return ;
$dsql->SetQuery($sql);
$dsql->Execute();

   $totalRow = $dsql->GetTotalRow();
$GLOBALS[autoindex] = 0;
for($i=0;$i < $line;$i++)
{
if($col>1) $likeType .= <dl>\r\n;
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= <dd>\r\n;
if($row=$dsql->GetArray())
{
$row[sonids] = $row[rel] = ;
if($needRel)
{
$row[sonids] = GetSonIds($row[id], 0, false);
if($row[sonids]==) $row[rel] = ;
else $row[rel] = rel=dropmenu{$row[id]};
}
//处理同级栏目中,当前栏目的样式
if( ($row[id]==$typeid ($topid==$row[id] $type==top) ) $currentstyle!= )
{
if($currentstyle!=)
{
$linkOkstr = $currentstyle;
$row[typelink] = GetOneTypeUrlA($row);
$linkOkstr = str_replace(~rel~,$row[rel],$linkOkstr);
$linkOkstr = str_replace(~id~,$row[id],$linkOkstr);
$linkOkstr = str_replace(~typelink~,$row[typelink],$linkOkstr);
$linkOkstr = str_replace(~typename~,$row[typename],$linkOkstr);
$likeType .= $linkOkstr;
}
}else
{
$row[typelink] = $row[typeurl] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match(/^sonchannel[0-9]*$/,$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row[id],$dsql2));
}
}
}
$likeType .= $dtp2->GetResult();
}
}
if($col>1) $likeType .= </dd>\r\n;
$GLOBALS[autoindex]++;
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= </dl>\r\n;
}
}//Loop for $i
reset($dsql2);
$dsql->FreeResult();
return $likeType;
}
function lib_channel_son($ctag,$typeid = 0,$dsql2)
{
$attlist = row100,col1,currentstyle;
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = $ctag->GetInnerText();
$dsql3 = clone $dsql2;
$likeType = ;
//if($_sys_globals[typeid]>0) $typeid = $_sys_globals[typeid];
if($typeid==0) {
return ;
}
$sql = Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description
From dede_arctype where reid=$typeid And ishidden<>1 order by sortrank asc limit 0,$row;
//And id<>$typeid
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace(field,[,]);
$dtp2->LoadSource($innertext);
$dsql2->SetQuery($sql);
$dsql2->Execute();
$line = $row;
for($i=0;$i < $line;$i++)
{
if($col>1) $likeType .= <dl>\r\n;
for($j=0;$j<$col;$j++)
{
if($col>1) $likeType .= <dd>\r\n;
if($row=$dsql2->GetArray())
{
$row[typelink] = $row[typeurl] = GetOneTypeUrlA($row);
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTags as $tagid=>$ctag){
if(isset($row[$ctag->GetName()]))
{
$dtp2->Assign($tagid,$row[$ctag->GetName()]);
}
elseif (preg_match(/^sonchannel[0-9]*$/,$ctag->GetName()))
{
$dtp2->Assign($tagid,lib_channel_son($ctag,$row[id],$dsql3));
}
}
}
$likeType .= $dtp2->GetResult();
}
if($col>1) $likeType .= </dd>\r\n;
}//Loop Col
if($col>1)
{
$i += $col - 1;
$likeType .= </dl>\r\n;
}
}//Loop for $i
reset($dsql3);
$dsql2->FreeResult();
return $likeType;
}
?>

   复制这个文件覆盖旧文件。

   二:巧用sonchannel标签做三级菜单

   {dede:channelartlist typeid=72}

   {/dede:channelartlist} //调用顶级栏目(一级菜单)

   dede:channel type=son}

   {/dede:channel} //二级菜单

   [field:sonchannel0]//无限获取三级菜单

   实例:

   div class=nav>
<div class=nav-l>
<a href=/><span class=nav-l-span>顶级菜单<i></i></span> </a>
<div class=nav-submenu>
<div id=submenu>
{dede:channelartlist typeid=72}
<div class=submenu1>
<h3 class=submenu1-t1><a href={dede:field name=typeurl/}>{dede:field name=typename/}</a></h3>
</div>
{/dede:channelartlist}
</div>
</div>

   <div class=nav-submenu-xl>

   {dede:channelartlist typeid=72}

   <div class=xl-menu style=top:1px;display:none;>

   <div class=xl-menu-l xl-menu-wc>
<div class=xl-menu-l-part>

   {dede:channel type=son}

   <div id=xl-menu-l-div3>
<div class=xl-menu-l-div3-b>

   <b> <a href=[field:typelink/]>[field:typename/]</a></b>

   </div>
<div class=xl-menu-l-div3-p>

   <p>[field:sonchannel0] <a href=[field:typelink/]>[field:typename/]</a> [/field:sonchannel0] </p>
</div>

   </div>
{/dede:channel}
</div>
</div>
</div>
{/dede:channelartlist}
</div>
</div>

   注:这里顶级菜单我调用了两次,大家按照自己的需求来!

TAG: 产品运营

亮剑seo论坛
热门标签