织梦获取子栏目列表递归调用函数LogicGetOptionArray($id, $step, $oper=0)

admin2023-01-181195

所以文件:include/typelink.class.php

函数:LogicGetOptionArray($id, $step, $oper=0)

参数:$id 栏目ID;$step 步进标志;$oper 操作权限

返回值:字符串

这个函数与获取顶级栏目函数GetOptionList(参数)相比简单多了。

要获取一个栏目的子栏目,如果知道了子栏目的id可以获取所以的子栏目,但是,这种方法不好,不好在需要知道所有子栏目id,不仅麻烦,而且获取子栏目id又是一个问题;另一方法就是指定某一栏目id,获取这个栏目的子栏目,这个就非常简单了,如果给定一个栏目$id,要获取这个栏目所有子栏目,只需要查询时,把条件设置reid='".$id."',当然,还要设置一下这个子栏目的不是外部连接的,即ispart<>2 。这样就可以把这个栏目下面的所有子栏目相关字段查询出来,这在织梦二次开发中常常用到。

若$oper是一个数组且$cfg_admin_channel !='all'时,进行处理一下,这个跟获取顶级栏目类似,若这个条件成立则再把查询出来的id,即$row->id 不在$oper里面的子栏目id全部去掉,代码是:

            if(is_array($oper) && $cfg_admin_channel != 'all')
            {
                if(!in_array($row->id, $oper)) continue;
            }

为什么这样做,因为,$oper是操作权限值,说的简单点就是这里面设置的什么值,就只能在这个值里面查询子栏目,不在这里面的一个也不要。相当于一个查询权限的限制。

若查询的栏目属性为1,也就是封面,则选项下面加个样式:

$this->OptionArrayList .= "<option value='".$row->id."' style='background-color:#EFEFEF;color:#666666'>$step".$row->typename."</option>\r\n";

否则不加样式。

最后,逻辑递归调用:

$this->LogicGetOptionArray($row->id, $step."─", $oper);

只有当$row->id下面还有子栏目时,这个调用才能成功,否则,接着执行下一个大循环,查询子栏目,以此类似,直到查询到$oper里面的设置的操作权限id的所有子栏目。

网友评论