找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1118|回复: 0

[分享] 修改dede源码,让dede:channelartlist排除指定typeid

[复制链接]
发表于 2018-7-9 21:19:37 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
找到 \include\taglib\channelartlist.lib.php,   查找 $attlist


  1. $attlist = 'typeid|0,row|20,cacheid|';
复制代码

修改为:
  1. $attlist = 'typeid|0,row|20,cacheid|,notypeid|0';
复制代码
  [此处添加了一个所要排除typeid的参数---notypeid]

查找:  
  1. $dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath   from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");
复制代码


在其前面添加(注意是在前面添加):

  1. //否定指定ID
  2. if($notypeid!=0) {
  3.      $tpsql = $tpsql."and not(id in($notypeid)) ";
  4. }
复制代码

模板调用:
{dede:channelartlist typeid ='114' notypeid='123,124,125,126,127,128'}

其中notypeid='123,124,125,126,127,128' 中的 123,124,125,126,127,128 为114的子栏目


修改后的channelartlist.lib.php
  1.         <?php

  2.          

  3.         if(!defined('DEDEINC')) exit('Request Error!');

  4.         require_once(DEDEINC.'/arc.partview.class.php');

  5.          

  6.         function lib_channelartlist(&$ctag,&$refObj)

  7.         {

  8.             global $dsql,$envs,$_sys_globals;

  9.          

  10.             //处理标记属性、innertext

  11.             $attlist = 'typeid|0,row|20,cacheid|,notypeid|0';

  12.             FillAttsDefault($ctag->CAttribute->Items,$attlist);

  13.             extract($ctag->CAttribute->Items, EXTR_SKIP);

  14.             $innertext = trim($ctag->GetInnerText());

  15.             $artlist = '';

  16.             //读取固定的缓存块

  17.             $cacheid = trim($cacheid);

  18.             if($cacheid !='') {

  19.                 $artlist = GetCacheBlock($cacheid);

  20.                 if($artlist!='') return $artlist;

  21.             }

  22.             

  23.             if(empty($typeid))

  24.             {

  25.                 $typeid = ( !empty($refObj->TypeLink->TypeInfos['id']) ?  $refObj->TypeLink->TypeInfos['id'] : 0 );

  26.             }

  27.             

  28.             if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm');

  29.             $totalnum = $row;

  30.             if(empty($totalnum)) $totalnum = 20;

  31.          

  32.             //获得类别ID总数的信息

  33.             $typeids = array();

  34.             if($typeid==0 || $typeid=='top') {

  35.                 $tpsql = " reid=0 And ispart<>2 And ishidden<>1 And channeltype>0 ";

  36.             }

  37.             else

  38.             {

  39.                 if(!ereg(',',$typeid)) {

  40.                     $tpsql = " reid='$typeid' And ispart<>2 And ishidden<>1 ";

  41.                 }

  42.                 else {

  43.                     $tpsql = " id in($typeid) And ispart<>2 And ishidden<>1 ";

  44.                 }

  45.             }

  46.             

  47.             //否定指定ID

  48.             if($notypeid!=0) {

  49.                 $tpsql = $tpsql."and not(id in($notypeid)) ";

  50.             }

  51.             

  52.             $dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath

  53.                                                     from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");

  54.             $dsql->Execute();

  55.             while($row = $dsql->GetArray()) {

  56.                 $typeids[] = $row;

  57.             }

  58.          

  59.             if(!isset($typeids[0])) return '';

  60.          

  61.             $GLOBALS['itemindex'] = 0;

  62.             $GLOBALS['itemparity'] = 1;

  63.             for($i=0;isset($typeids[$i]);$i++)

  64.             {

  65.                 $GLOBALS['itemindex']++;

  66.                 $pv = new PartView($typeids[$i]['id']);

  67.                 $pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);

  68.                 $pv->SetTemplet($innertext,'string');

  69.                 $artlist .= $pv->GetResult();

  70.                 $GLOBALS['itemparity'] = ($GLOBALS['itemparity']==1 ? 2 : 1);

  71.             }

  72.             //注销环境变量,以防止后续调用中被使用

  73.             $GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];

  74.             $GLOBALS['envs']['reid'] = '';

  75.             if($cacheid !='') {

  76.                 WriteCacheBlock($cacheid, $artlist);

  77.             }

  78.             return $artlist;

  79.         }

  80.         ?>
复制代码


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-25 23:27 , Processed in 0.044075 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表