获得自由列表的网址的织梦函数GetFreeListUrl()分析

admin2020-01-29989

所在文件:/include/helpers/channelunit.helper.php

功能:返回自由列表的网址

函数名:GetFreeListUrl($lid,$namerule,$listdir,$defaultpage,$nodefault)

自由列表指的是织梦后台“核心”——>“自由列表管理” 如下图所示。

image.png

函数参数:$lid指的是列表id,也就是上图中10或1;

为方便大家理解,我截取一个图片如下。

image.png

上图中1表示列表HTML存放目录,也就是参数$listdir; 图中2表示目录默认页名称,也就是参数$defaultpage,若没有这个默认名则参数为$nodefalut; 图中3表命名规则 $namerule 。把这些参数弄明白了,特别是命名规则,再去研究这个函数的代码就简单多了。

代码分析开始:

1.替换列表目录符号{cmspath}:

通过代码$listdir = str_replace('{cmspath}',$GLOBALS['cfg_cmspath'],$listdir);把列表目录{cmspath}/freelist/里面的{cmspath}替换成cms安装目录,假设我安装在根目录里面,这样替换后,列表目录就是/freelist/ 了。

2.若没有默认页面等于1,即$nodefault==1,也就是存在默认页面(这里设计的不好,1相当是true,没有默认页等于1,意思就是不存在默认页,但是,实际上存在,这里应当设计成0,这样就符合逻辑了,不过这样也没有错,因为,

数据库就把这个noddefault设置成1了)也就是上图中的默认页面index.html,若这个不存在,则执行下面的代码:

$okfile = str_replace('{page}','1',$namerule);
$okfile = str_replace('{listid}',$lid,$okfile);
$okfile = str_replace('{listdir}',$listdir,$okfile);

这段代码就是替换掉命名规则里面的内容,织梦默认的命名规则是:{listdir}/index_{listid}_{page}.html,经过上面三行代码的替换得到类似的$ikfile=/freelist/index_1_1.html,假设织梦基地以自由列表id为1的例子,也就是上图中的例子。

若$nodefault不为1,即没有默认页,这时就要生成动态连接了:

$okfile = $GLOBALS['cfg_phpurl']."/freelist.php?lid=$lid";

然后,返回这个连接,退出函数。

替换$okfile里面的符号:\,//

再一次组装url:

$trueFile =$GLOBALS['cfg_basedir'].$okfile 其中$GLOBALS['cfg_basedir']为站点根目录。

最后,再一次判断$trueFile 这个文件是不是存在,若不存在则再一次组装自由列表url,你可能要问上面不是组装好了吗?为什么还要判断存不存在呢? 这是因为,上面我们又执行了替换代码,又重新组装了url,所以,就要重新判断一下。

最后,返回这个url 。

网友评论