admin 发表于 2014-1-16 13:03:00

织梦channelartlist调用结果排除指定typeid栏目数据

源程序修改之前,切记备份,请自行测试,有问题到论坛交流。

找到 \include\taglib\channelartlist.lib.php,使用editplus查找$attlist

将$attlist = 'typeid|0,row|20,cacheid|';

修改为:

$attlist = 'typeid|0,row|20,cacheid|,notypeid|0';   [此处添加了一个所要排除typeid的参数---notypeid]

查找:

$dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath   from `dede_arctype` where $tpsql order by sortrank asc limit $totalnum");

在其前面添加(注意是在前面添加):
//否定指定IDif($notypeid!=0) {   $tpsql = $tpsql."and not(id in($notypeid)) ";}模板调用:{dede:channelartlist typeid ='114' notypeid='123,124,122,127'}其中notypeid='123,124,122,127'中的123,124,122,127为114的子栏目。下面是修改后的channelartlist.lib.php<?php



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

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



function lib_channelartlist(&$ctag,&$refObj)

{

        global $dsql,$envs,$_sys_globals;



        //处理标记属性、innertext

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

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

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

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

        $artlist = '';

        //读取固定的缓存块

        $cacheid = trim($cacheid);

        if($cacheid !='') {

                $artlist = GetCacheBlock($cacheid);

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

        }

       

        if(empty($typeid))

        {

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

        }

       

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

        $totalnum = $row;

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



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

        $typeids = array();

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

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

        }

        else

        {

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

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

                }

                else {

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

                }

        }

       

        //否定指定ID

        if($notypeid!=0) {

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

        }

       

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

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

        $dsql->Execute();

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

                $typeids[] = $row;

        }



        if(!isset($typeids)) return '';



        $GLOBALS['itemindex'] = 0;

        $GLOBALS['itemparity'] = 1;

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

        {

                $GLOBALS['itemindex']++;

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

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

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

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

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

        }

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

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

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

        if($cacheid !='') {

                WriteCacheBlock($cacheid, $artlist);

        }

        return $artlist;

}

?>
页: [1]
查看完整版本: 织梦channelartlist调用结果排除指定typeid栏目数据