如何在织梦系统中调用四级栏目?

织梦调用四级栏目可以使用标签{dede:channel type=’top’}来获取顶级栏目,然后通过嵌套使用{dede:channel type=’son’}来获取子栏目。

在织梦中调用四级栏目,首先需要修改文件:includetaglib目录下的channel.lib.php,以下是详细的步骤和代码示例:

如何在织梦系统中调用四级栏目?

1、修改channel.lib.php 文件

打开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,sitesitepath,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);
                    }
                }
            }
        }
    }
    return $likeType;
}

2、调用四级栏目

使用{dede:channel row='5' type='self'} 标签可以调用同级栏目,而不需要指定 ID。

{dede:channel row='5' type='self'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}

3、调用文章列表

使用{dede:arclist row='条数' typeid='all' orderby='pubdate'} 标签可以调用文章列表。

{dede:arclist row='8' typeid='top' orderby='pubdate'}
    [field:title/]
{/dede:arclist}

相关问答FAQs

如何在织梦系统中调用四级栏目?

1、问:如何确保修改后的channel.lib.php 文件生效?

答:确保修改后的channel.lib.php 文件生效,你需要刷新织梦后台缓存,可以通过后台管理界面找到“系统设置” > “SQL命令运行工具”,然后执行一条简单的SQL语句,如SELECT 1,这样就能清除缓存并使新修改的文件生效。

2、问:如何在模板中调用特定类型的栏目及其子栏目?

答:在模板中调用特定类型的栏目及其子栏目,可以使用{dede:channel type='son' typeid='父栏目ID'} 标签,要调用父栏目ID为1的所有子栏目,可以使用以下代码:

“`html

{dede:channel type=’son’ typeid=’1′}

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

如何在织梦系统中调用四级栏目?

{/dede:channel}

“`

步骤 代码示例
1. 获取顶级栏目ID $cid = 1; // 假设顶级栏目ID为1
2. 获取二级栏目列表 $child_list = GetChildList($cid);
3. 循环二级栏目,获取三级栏目ID foreach ($child_list as $v) { $sec_cid = $v['id']; ... }
4. 获取三级栏目列表 $sec_list = GetChildList($sec_cid);
5. 循环三级栏目,获取四级栏目ID foreach ($sec_list as $v) { $third_cid = $v['id']; ... }
6. 获取四级栏目信息 $cat_info = GetCategory($third_cid);

在代码示例中,GetChildList() 函数用于获取指定栏目的子栏目列表,GetCategory() 函数用于获取指定栏目的详细信息。

代码仅为示例,实际使用时请根据实际情况进行调整。

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

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

(0)
未希新媒体运营
上一篇 2024-10-08 18:15
下一篇 2024-10-08 18:15

相关推荐

发表回复

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

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