返回栏目相关的下级目录的类目ID列表 函数GetSunTypes($id, $channel=0)

admin2020-02-131011

如果不做织梦二次开发的话,这个函数用得就不多,但是,若是操作栏目或调用文章,这个函数用的就比较多,与这个类似的一个函数是织梦函数GetSonIds($id,$channel=0,$addthis=true),这个函数的功能是获得某id的所有下级id。这二个函数有相似的地方例如都用到了递归调用,也有很大不同,函数GetsunTypes($id,$channel=0)是直接查询数据库的,而函数GetSonIds($id,$channel=0,$addthis=true)则是从缓存文件里面提取的id。

函数说明:

函数:GetSunTypes($id,$channel=0)

参数:$id栏目ID;$channel频道id

返回值:返回一个包含有栏目id的数组

所在文件:include/typeunit.class.admin.php

函数分析:

1.设置全局变量:

$this->dsql = $GLOBALS['dsql'];

2.设置数组$this->idArray:$this->idArray[$this->idCounter]=$id;这里面的键名$this->idCounter默认值是0,然后,键名加1。

3.组装sql语句:

        if($channel!=0)
        {
            $csql = " And channeltype=$channel ";
        }
        else
        {
            $csql = "";
        }

若频道模型不为零,查询的条件里面就多了And channeltype=$channel这个条件。

4.递归调用:

        while($row=$this->dsql->GetObject("gs".$fid))
        {
            $nid = $row->id;
            $this->GetSunTypes($nid,$channel);
        }

因为,通过上面的sql语句查询出来的是一个栏目的子栏目id,举例说明,例如获取栏目id=1的子栏目,这样执行sql语句里面的reid=1时,查询出来的就是栏目id为1的子栏目id,这些栏目id分别为2,3,4,5,这个我们可以查看数据库如下图所示。

当执行到while里面后,若为真,则执行里面的递归调用,假设$nid=2,当递归调用后,又一次执行了代码:$this->idArray[$this->idCounter]=$id;

第一次执行后,数组$this->idArray[0]=1,这次执行后$this->idArray[1]=2,然后,再执行上面的sql但是,此时,查询reid=2时并没有对于的id了。所以,程序就进行第二次递归调用,以次类推荐,直到执行完id=5后。最后,执行return $this->idArray;

这时的数组$this-idArray 为:array(1,2,3,4,5)


网友评论