当前位置:首页>行业动态> 正文

如何有效解决DedeCMS 5.7中的三级目录和侧边导航调用问题?

要解决dede 5.7的三级目录和侧导航调用问题,你可以使用以下的代码片段:,,“php,,“,,这段代码可以根据当前栏目的ID、类型ID和频道类型,查询出其子栏目,并生成相应的侧导航列表。你需要将这段代码插入到你的模板文件中适当的位置,以实现三级目录和侧导航的调用功能。

修改文件

1、找到并备份文件:在DedeCMS系统中,首先需要找到include/taglib/channel.lib.php文件,在进行任何修改之前,务必对该文件进行备份,以防止出现意外情况导致网站无法正常运行。

2、替换代码:用以下代码替换channel.lib.php文件中的所有内容:

“`php

function lib_channel(&$ctag,&$refObj){

global $_sys_globals,$envs,$dsql;

$attlist ="typeid|0,reid|0,row|100,col|1,type|son,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";

} elseif($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";

} elseif($type=="self"){

if($reid==0){

return ”;

}

$sql ="Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description Fromdede_arctypewhere 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

";

for($j=0;$j<$col;$j++){

if($col>1)$likeType .="<dd>r

";

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()]);

}

}

}

}

if($col>1)$likeType .=" r

";

}

}

if($col>1)$likeType .="</dl>r

";

}

return $likeType;

}

“`

调用方法

1、顶级栏目调用:在模板中使用以下代码调用所有顶级栏目。

“`html

{dede:channel type=’top’ currentstyle="<li class=’thisclass’><a href=’~typelink~’>~typename~</a></li>"}/li>

“`

2、指定顶级栏目ID调用:使用以下代码调用指定ID的顶级栏目。

“`html

{dede:type typeid=’1′}<a href="[field:typelink /]">[field:typename /]</a>{/dede:type}

“`

3、二级栏目调用:在模板中使用以下代码调用指定顶级栏目下的二级栏目。

“`html

<li>{dede:type typeid=’1′}<a href="[field:typelink/]">[field:typename/]</a></li>{/dede:type}

<ul style="display: none;">{dede:channelartlist typeid=’top’ typeid=’1′}<li><a href='{dede:field name=’typeurl’/}’>{dede:field name=’typename’/}</a></li>{/dede:channelartlist}</ul></li>

“`

4、三级栏目调用:在模板中使用以下代码实现三级栏目的调用。

“`html

<div id="navMenu">

<li {dede:field name=typeid runphp="yes"}(@me=="")?@me=" class=’on’":@me="";{/dede:field}><a href="/">首页</a></li>

{dede:channelartlist typeid=’top’ row=’10’ currentstyle="home"}//currentstyle 可以实现栏目切换时改变class状态,但需要修一些文件,具体看下面一段代码

<li class='{dede:field.currentstyle/}’><a href="{dede:field name=’typeurl’/}" rel=’dropmenu’>{dede:field name=’typename’/}</a>

<div id="erji" class="erji hide" style="position: absolute;width: 200px">

{dede:sql sql=’select * from dede_arctype where reid =~id~ ‘}

<dl style="position: relative;height: 30px">

<a href="[field:typedir function=’str_replace("{cmspath}","",@me)’/]" target=’_self’ title="[field:typename/]" style="width: 90%;paddingleft:10%;textalign:left;lineheight: 30px">[field:typename/]</a>

<div id="sanji" class="hide" style="position: absolute;width: 200px;left: 200px;background:#0D6598;">

[field:id runphp=’yes’]

global $dsql;

$id=@me;

$sql=’Select * from dede_arctype where reid=’.$id.’ ORDER BY id limit 0,20′;

$dsql>SetQuery($sql);

$dsql>Execute();

while($row =$dsql>GetArray()){

$url = str_replace("{cmspath}","",$row[‘typedir’]);

$str .='<a href="’.$url.’" style="display: block;width:90%;paddingleft: 10%;textalign: left;lineheight: 30px;">’.$row[‘typename’].'</a>’;

@me =$str;

}

if(@me ==$id){//避免3级栏目为空时 写出分类ID,这里加以判断

@me =”;

}

[/field:id]

</div>

</div>

</dl>

</li>

{/dede:sql}

</div>

</div>

“`

下表是织梦DedeCMS 5.7版本中三级目录、侧导航调用的详细方法:

步骤操作说明示例代码备注
备份文件找到并备份include/taglib/channel.lib.php文件N/A确保安全
替换代码用提供的代码替换channel.lib.php文件中的内容见上文代码块核心步骤
调用顶级栏目在模板中调用所有顶级栏目{dede:channel type='top' currentstyle="
  • ~typename~
  • "}/li>

    基本调用
    调用指定顶级栏目ID调用指定ID的顶级栏目{dede:type typeid='1'}[field:typename /]{/dede:type}特定ID调用
    调用二级栏目在模板中调用指定顶级栏目下的二级栏目
  • {dede:type typeid='1'}[field:typename/]
  • {/dede:type}

      {dede:channelartlist typeid='top' typeid='1'}
    • {dede:field name='typename'/}
    • {/dede:channelartlist}

    二级栏目展示
    调用三级栏目实现三级栏目的调用

    高级调用

    解决DedeCMS 5.7 三级目录和侧导航的调用方法

    三级目录调用

    DedeCMS 5.7的三级目录调用通常通过模板标签实现,以下是一个详细的调用步骤:

    1. 准备工作

    确保您的DedeCMS 5.7系统已经安装并配置好。

    打开您需要添加三级目录的模板文件。

    2. 添加模板标签

    在模板文件中,使用以下标签来调用三级目录:

    <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>

    这里的{dede:field name='typename'/}将显示分类名称,而{dede:field name='typeurl'/}将显示分类的链接。

    3. 调用三级分类

    如果需要显示三级分类,可以使用以下标签:

    {dede:arclist typeid='@me' row='10' titlelen='30' orderby='id'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:arclist}

    这里,typeid='@me'表示当前页面的分类ID,row='10'表示每页显示10条记录,titlelen='30'表示标题长度为30个字符,orderby='id'表示按ID排序。

    侧导航调用

    侧导航的调用同样可以通过模板标签实现,以下是一个详细的调用步骤:

    1. 准备工作

    打开您需要添加侧导航的模板文件。

    2. 添加侧导航标签

    在模板文件中,使用以下标签来调用侧导航:

    {dede:channel type='son' id='1'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}

    这里的type='son'表示获取当前分类的所有子分类,id='1'表示从ID为1的分类开始获取。

    3. 调用侧导航

    如果需要显示更详细的侧导航,可以结合使用以下标签:

    {dede:channelartlist typeid='@me' row='10' titlelen='30'}
        <a href="[field:arcurl/]">[field:title/]</a>
    {/dede:channelartlist}

    这里,typeid='@me'表示当前页面的分类ID,row='10'表示每页显示10条记录,titlelen='30'表示标题长度为30个字符。

    通过以上步骤,您可以在DedeCMS 5.7中实现三级目录和侧导航的调用,请根据实际情况调整标签的参数,以满足您的需求。