织梦dedecms如何调用指定三级子栏目或多个栏目导航

网页制作 / CSS / Div+CSS教程,

经常会遇到需要调用多个指定的顶级栏目导航,那我们如何实现呢?关于DEDECMS实现嵌套获取栏目及其子栏目列表的问题,在论坛找到了以前版本的修改方法,于是修改了一下,现在分享给大家。请看实例代码:

织梦dedecms如何调用指定三级子栏目或多个栏目导航

修改文件:\include\taglib目录下的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";
    }
    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 = "row|100,col|1,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;
}
?>

注:如果你安装的dedecms使用的表前缀进行修改过,需要把上面代码中的 dede_arctype 前缀修改掉才行。


模板调用 [field:sonchannel0] [/field:sonchannel0] 这个是用来取子栏目用得(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)

这个的作用就是当你的栏目有很多子栏目 无限分级的时候方便你取子栏目的

例子

           {dede:channel type='son' typeid='22'}
              [field:typename/]
                    <ul>
                    [field:sonchannel0]
                    <li><a href="[field:typelink/]">[field:typename/]</a></li>
                         [field:sonchannel1]
                        <li><a href="[field:typelink/]">---[field:typename/]</a></li>
                             [field:sonchannel2]
                            <li><a href="[field:typelink/]">===[field:typename/]</a></li>
                                [field:sonchannel3]
                                <li><a href="[field:typelink/]">===[field:typename/]</a></li>
                                 [/field:sonchannel3]
                             [/field:sonchannel2]
                         [/field:sonchannel1]
                    [/field:sonchannel0]
                    </ul>
            {/dede:channel}
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

织梦如何调用会员详细信息: 在include/extend.func.php function GetMemberInfos($fields,$mid){ global $dsql; if($mid = 0){ $revalue = Error; } else{ $row=$dsql-GetOne(sele ct * from dede_member_person where mid ={$mid}); if(!is_array($row)){
在优化织梦DeDeCMS的个人博客时往往需要进行二次开发,在发表图集和文章时总是没发表一篇就要去更改文章作者和来源,操作繁琐非常麻烦,能简单就简单,无非就是修改织梦DeDeCMS图集与文章的默认来源于作者,开始之前需要提到的是图集发布于文章发布相关的文
织梦后台所有文档默认只能按标题名称搜索对应关键词,有时候要搜索到的关键词并不存在标题中,而是存在文章内容里面。 那么如何搜索带有关键词的文章内容的文章呢? 打开/dede/content_list.php在185行找到 $whereSql .= AND ( CONCAT(arc.title,arc.writer)
织梦会员邮件验证通知在https域名下验证链接错误,程序默认只支持在http://的站点,我们需要改成让邮件支持http和https均可正常 以下文件如果你的网站里有的的没有,可跳过 1、打开 /member/index_do.php 找到,大概在31行 $url = http://.preg_replace(#\/\
织梦dedecms系统arclist标签noflag属性默认是只能过滤一个参数,比如过滤推荐是noflag=c,过滤有图片的文章是noflag=c,在模板制作过程中,有时候我们为了seo和避免重复,需要过滤多个参数。今天小编就来跟大家讲讲织梦dedecms系统noflag过滤多个参数。 打开
dedecms修改后台编辑器参数GetEditor dedecms通过include/helpers/util.helper.php function GetEditor($fname, $fvalue, $nheight=350, $etype=Basic, $gtype=print, $isfullpage=FALSE) 函数调用文本编辑器,个个参数可参考该方法的注释信息, * 获取编辑器