织梦函数GetSonIds()获得某id的所有下级id,这个函数是如何运行,下面小编为大家进行解析:织梦函数GetSonIds()获得某id的所有下级id,这个函数是如何运行,下面小编为大家进行解析: 原理分析 /** * 获得某id的所有下级id * * @param string $id 栏目id * @param string $channel 模型ID * @param string $addthis 是否包含本身 * @re
原理分析
/**
* 获得某id的所有下级id
*
* @param string $id 栏目id
* @param string $channel 模型ID
* @param string $addthis 是否包含本身
* @return string
*/
function GetSonIds($id,$channel=0,$addthis=true)
{
global $cfg_Cs;
$GLOBALS['idArray'] = array();
if( !is_array($cfg_Cs) )
{
require_once(DEDEDATA."/cache/inc_catalog_base.inc");
}
GetSonIdsLogic($id,$cfg_Cs,$channel,$addthis);
$rquery = join(',',$GLOBALS['idArray']);
$rquery = preg_replace("/,$/", '', $rquery);
return $rquery;
}
这个函数GetSonIds($id,$channel=0,$addthis=true)跟函数GetSunTypes($id,$channel=0)功能都是获得某栏目下面的所有子栏目,也包括栏目本身,但是这二个函数返回值不同,函数GetSonIds($id,$channel=0,$addthis=true)返回的值是字符串,函数GetSunTypes($id,$channel=0)返回值是数组。
函数GetSonIds()和GetSunTypes()分别在文件:include/helpers/channelunit.helper.php和include/typeunit.class.admin.php里面。
函数GetSonIds($id,$channel=0)通过遍历cache/inc_catalog_base.inc文件,来取得栏目$id所有id值。
源码分析
1、通过上面的递归逻辑函数GetSonIdsLogic($id,$cfg_Cs,$channel,$addthis)调用后,得到了一个数组$GLOBALS['idArray'],以$id=18为例子,这个数组的值是18,19。2、通过join(分隔符号,数组)函数把数组变成字符串,存入变量$rquery里面。
函数join()跟函数implode()是完全一样的,同一个函数的不同的叫法,join()函数是implode()函数的别名。
举例子说明这个函数的是如何把数组变成字符串的。
<?php
$arr= array('dog','cat','chiken');
$str= join('|',$arr);
echo $str;
?>
打印结果如下:dog|cat|chiken
同样,若把join('|',$arr)换成implode('|',$arr)的结果是完全样一样的。
若数组$arr不索引数组,而是关联数组,join('|',$arr)的结果也是一样的,也就是说,无论是关联数组,还是索引数组,都不影响结果,join('|',$arr)只取数组的值。
3、变量$rquery的值是18,19,但是为了保证百分之百正确,函数用了一个正则匹配preg_replace("/,$/",'',$rquery),这个匹配的意思是把最后的符号逗号去掉。然后,return返回18,19这二个栏目id。
4、验证一下:
我们在文件/dede/catalog.do.php加入如下代码:
helper(channelunit);
echo GetSonIds(18);
exit("不能删除!");
到后台删除“网页基础”栏目,得到的结果如下图所示。
沃梦达教程
本文标题为:织梦函数GetSonIds()解析获得某id的所有下级id
猜你喜欢
- pbootcms去除ueditor编辑器图片自动添加的title和alt属性 2023-07-08
- 怎么安装使用PbootCMS网站模板 2023-07-08
- 织梦DedeCMS如何实现文章列表隔行换色变样式 2023-07-08
- 织梦dedecms点击数统计控制(刷新页面不新增点击数) 2022-07-20
- dedecms织梦列表页标题增加页码的方法 2022-07-22
- pbootcms文章插入图片不固定宽高的办法 2023-07-08
- 织梦采集标题不完整的解决方法,修改标题长度 2022-07-14
- 织梦dedecms最全的清除文档的sql语句 2022-06-24
- PbootCMS伪静态配置教程以及各web容器配置规则 2023-07-08
- PbootCMS网站标题描述等标签限制字数的办法 2023-07-08