获取子栏目递归调用的织梦函数LogicListAllSunType($id, $step)分析
这个函数跟函数GetSonIdsLogic()类似,都是调用子栏目id,但是,调取出来后,处理的方式不一样,要不也就不用分二个函数了,直接使用一个就可以了。
函数:LogicListAllSunType($id, $step)
参数:$id 栏目id,$step 层级标志,这个层级标志实际上,在本函数中,甚至本类中都没有使用。
功能:调用子栏目内容列表,例如下图中“网页基地”下面的子栏目。
所在文件:后台栏目管理类,include/typeunit.calss.admin.php
要研究透彻这个函数,就要弄明白,这个函数具体是做什么的,上面我们提到了,是把子栏目遍历出来,具体功能就是组装一个一个的子栏目以级子栏目上面的功能,我们取一个子栏目代码如下所示。
这个函数的功能就是把“网页基础”下面的子栏目一个一个的遍历出来,显示在“网站栏目管理”里面。知道了这一点再去分析代码就简单多了。
代码分析开始:
要把一个栏目(这里以“网页基地”为例子,网页基础的栏目id为1)的子栏目取出来,首先就要根据栏目id来查询,这个栏目下面的子栏目相关资料。当参数$id=1时,指的就是查询栏目id=1的子栏目列表。
先看这行sql语句,这里面最重要的就是后面的where 条件,reid='".$id."' 即reid=1, 我们看一下数据库栏目表reid=1的栏目都有哪些,如下图所示。
从上图中我们可以看出,reid=1的栏目就是栏目id=1的子栏目,这一点非常重要,也是这个函数里面的关键部分,查询一个栏目的子栏目以后我们就可以这样去操作,如果我们去做织梦二次开发,假设让你开发一个栏目,设计这个栏目表,就可以参考这个栏目的表的设计。
知道上面的内容我们就可以很容易的理解下面的代码了。下面的一大段代码如下所示。
这段代码里面的代码:$this->dsql->GetTotalRow($fid)指的是查询出来的记录数,通过这个来判断id=1栏目下面有没有子栏目,若大于0说明有子栏目。
通过while来把一个一个的子栏目遍历出来。
在while里面,判断$row->id是不是在数组$admin_catalogs里在,这里的$admin_catalogs 指的是调用这个函数的函数里面提供的,所以,这里只要了解这里面存放的是一些id 就可以了。
当$row->ishidden=='1' 说明,这个栏目是隐藏的栏目,直接添加一个红色内容,代码为:$nss = "<font color='red'>[隐]</font>";
实际上上面都是为下面作准备的,下面开始判断“栏目属性”了,“栏目属性”指的是如下图所示。
0表示最终列表栏目,1表示 频道封面,2表示外部连接。
if($ispart=='0')则执行下面的代码:
通过while就把id=1栏目的子栏目一个一个的遍历出来,因为,在这个列表代码里面都是用的echo 把具体的html代码和php代码给显示出来了,所以,这个函数没有返回值,这样说不完全正确,因为,echo本身就是返回内容了,你只要知道这里说的什么意思就可以了。
为了不出错,这里在调用php变量的时候用大括号括起来:{$GLOBALS['cfg_phpurl']},这样的好处就是不若使用多了单引号和多引号不至于引起混乱,当然,完全可以用双引号例如:'img".$id."' 注意这二点就可以了。