获取子栏目递归调用的织梦函数LogicListAllSunType($id, $step)分析

admin2023-01-191152

这个函数跟函数GetSonIdsLogic()类似,都是调用子栏目id,但是,调取出来后,处理的方式不一样,要不也就不用分二个函数了,直接使用一个就可以了。

函数:LogicListAllSunType($id, $step)

参数:$id 栏目id,$step  层级标志,这个层级标志实际上,在本函数中,甚至本类中都没有使用。

功能:调用子栏目内容列表,例如下图中“网页基地”下面的子栏目。

所在文件:后台栏目管理类,include/typeunit.calss.admin.php

要研究透彻这个函数,就要弄明白,这个函数具体是做什么的,上面我们提到了,是把子栏目遍历出来,具体功能就是组装一个一个的子栏目以级子栏目上面的功能,我们取一个子栏目代码如下所示。

151153go6xrwk1gxo1mbml.jpg

这个函数的功能就是把“网页基础”下面的子栏目一个一个的遍历出来,显示在“网站栏目管理”里面。知道了这一点再去分析代码就简单多了。

代码分析开始:

要把一个栏目(这里以“网页基地”为例子,网页基础的栏目id为1)的子栏目取出来,首先就要根据栏目id来查询,这个栏目下面的子栏目相关资料。当参数$id=1时,指的就是查询栏目id=1的子栏目列表。

先看这行sql语句,这里面最重要的就是后面的where 条件,reid='".$id."' 即reid=1, 我们看一下数据库栏目表reid=1的栏目都有哪些,如下图所示。

151153go6xrwk1gxo1mbml.jpg

从上图中我们可以看出,reid=1的栏目就是栏目id=1的子栏目,这一点非常重要,也是这个函数里面的关键部分,查询一个栏目的子栏目以后我们就可以这样去操作,如果我们去做织梦二次开发,假设让你开发一个栏目,设计这个栏目表,就可以参考这个栏目的表的设计。

知道上面的内容我们就可以很容易的理解下面的代码了。下面的一大段代码如下所示。

122600pcx34f4145w98e5o.jpg

这段代码里面的代码:$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')则执行下面的代码:

122645t1hpe1a6a3xem266.jpg

通过while就把id=1栏目的子栏目一个一个的遍历出来,因为,在这个列表代码里面都是用的echo 把具体的html代码和php代码给显示出来了,所以,这个函数没有返回值,这样说不完全正确,因为,echo本身就是返回内容了,你只要知道这里说的什么意思就可以了。

为了不出错,这里在调用php变量的时候用大括号括起来:{$GLOBALS['cfg_phpurl']},这样的好处就是不若使用多了单引号和多引号不至于引起混乱,当然,完全可以用双引号例如:'img".$id."' 注意这二点就可以了。


网友评论