您当前的位置:主页 > 教程合集 > DedeCMS网站利发国际DedeCMS

DedeCMS中栏目与文章列表调用时排除指定栏目方法

发布时间:2016-02-28编辑:余斗阅读:(0)字号:
    与在使用织梦的时候,我们大部分顶级栏目都需要把子栏目列表掉出来,常规的调用标签为:

    {dede:channelartlist}
     
    调用出来的栏目为全部子栏目: DedeCMS中栏目与文章列表调用时排除指定栏目方法 这样就能把当前顶级栏目下的子栏目给调用出来,同理,调用文章列表的标签为:

      {dede:arclist row='10' orderby='rand' }
     
    这样也可以实现调用某一属性的文章。 但是,网站是千变万化的,很多时候,我们在制作织梦的模版时,有些栏目或者某些栏目下的文章我们不想调用出来,比如“关于我们”、“联系方式”等不是持续更新的栏目,那么我们在使用channelartlist与arclist调用列表时就需要排除一些指定栏目,今天余斗就说说如何修改DedeCMS核心文件来实现调用栏目列表与文章列表调用时排除指定栏目,老规矩,修改之前接的备份好文件,以免出错 一、channelartlist调用时排除指定栏目 首先找到 文件channelartlist.lib.php ,路径为\include\taglib\channelartlist.lib.php,查找$attlist,大概在第43行,将:

    $attlist = 'typeid|0,row|20,cacheid|';
     
    修改为:

    $attlist = 'typeid|0,row|20,cacheid|,notypeid|0'; // 此处添加了一个所要排除typeid的参数—notypeid再查找;
     
    添加的代码 DedeCMS中栏目与文章列表调用时排除指定栏目方法 再查找$dsql->SetQuery,大概在第78行。

    $dsql->SetQuery("Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");
     
    在这段代码上方加上:

    if($notypeid!=0) {
                      $tpsql = $tpsql."and not(id in($notypeid)) "; //否定指定ID
        }
     
    添加的代码 DedeCMS中栏目与文章列表调用时排除指定栏目方法 到此就添加了一个notypeid属性限制,调用时这样使用:

        {dede:channelartlist notypeid='10'}
     
    这样就排除了id为10的子栏目的调用: DedeCMS中栏目与文章列表调用时排除指定栏目方法 notypeid还可以和typeid搭配使用,比如:

        {dede:channelartlist typeid ='7' notypeid='8'}
     
    这样就实现id为7的栏目中id为8的子栏目不调用。 二、arclist调用时排除指定栏目 arclist标签的typeid属性里把想显示文章的栏目ID全部设置上,但这样做栏目ID太多的话,维护起来很麻烦,我们需要添加一个notypeid标签。 首先打开arclist.lib.php文件,路径为 /include/taglib/arclist.lib.php文件,查找return lib_arclistDone,大概在130行:

        return lib_arclistDone
                  (
                      $refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen,
                      $ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby,
                      $ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid,
                      $ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'),
                      $tagid,$pagesize,$isweight
              );
     
    在最后一个括号上加上代码:

      ,$ctag->GetAtt('notypeid')
     
    添加后的代码 DedeCMS中栏目与文章列表调用时排除指定栏目方法 再查找function lib_arclistDone,大概在第168行:

      function lib_arclistDone(&$refObj, &$ctag, $typeid=0, $row=10, $col=1, $titlelen=30, $infolen=160,
                    $imgwidth=120, $imgheight=90, $listtype='all', $orderby='default', $keyword='',
                    $innertext='', $arcid=0, $idlist='', $channelid=0, $limit='', $att='', $order='desc', $subday=0, $noflag='',$tagid='', $pagesize=0, $isweight='N')
     
    在最后的一个括号上加上代码:

      ,$notypeid=0
     
    添加后的代码 DedeCMS中栏目与文章列表调用时排除指定栏目方法 再查找$orwheres[] = ' arc.arcrank > -1 ';,大概在第321行:

      $orwheres[] = ' arc.arcrank > -1 ';
     
    在这段代码下面加上代码:

    if(!empty($notypeid))
    {
            $orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")";
    }
     
    添加后的代码 DedeCMS中栏目与文章列表调用时排除指定栏目方法 这样,DedeCMS的核心代码就修改完毕,保存之后,我们在arclist标签里试试看notypeid属性,代码为:

    {dede:arclist row='10' orderby='rand' notypeid='10'}
     
    不仅仅可以限制一个id,还可以实现多个id限制:

    {dede:arclist row='10' orderby='rand' notypeid='10,11,12'}
     
    以上就是栏目调用的文章列表调用的时候排除某个或几个栏目的实现方法,希望这篇教程能帮助有需要的人,如果你看完这篇教程还有什么疑问,欢迎给余斗留言。
关键字词DedeCMS 文章列表
余斗余斗
  1. 转载请注明: DedeCMS中栏目与文章列表调用时排除指定栏目方法_余斗余斗_利发国际
  2. 版权声明: 本站原创文章,由 发表在 DedeCMS 分类下,于2016-02-28最后更新
DedeCMS文章页实现点赞功能(非插件)
DedeCMS后台发布/修改文章自动提交百度实现方法
手机扫一扫 随身带着看

利发国际

百度360搜索搜狗搜索