返回栏目相关的下级目录的类目ID列表 函数GetSunTypes($id, $channel=0)
如果不做织梦二次开发的话,这个函数用得就不多,但是,若是操作栏目或调用文章,这个函数用的就比较多,与这个类似的一个函数是织梦函数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)