如何有效解决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_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

";

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

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

";

}

}

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}

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

    高级调用

    解决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中实现三级目录和侧导航的调用,请根据实际情况调整标签的参数,以满足您的需求。

    原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1121881.html

    本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

    (0)
    未希新媒体运营
    上一篇 2024-10-02 00:50
    下一篇 2024-10-02 00:50

    相关推荐

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注

    产品购买 QQ咨询 微信咨询 SEO优化
    分享本页
    返回顶部
    云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入