织梦获得文章网址函数GetFileUrl()

admin2023-01-171251

这函数非常重要,就是生成文档网址的函数,但是,实际上真正出大力的还是这个函数里面调用的函数GetFileName(),获取文件名函数。GetFileUrl()函数只是对获取的文件名类似/a/webbase/12.html等,进行处理,其它的事什么也没有做,这个函数也不需要做太多东西,就已经足够了。
函数名:($aid,$typeid,$timetag,$title,$ismake=0,$rank=0,$namerule='',$typedir='', $money=0, $filename='',$moresite=0,$siteurl='',$sitepath='')
所在文件:include/helpers/channelunit.helper.php
参数:这个函数一样也参数也是多的很吓人,这里一一说明这些参数,这些都是官方给的,有些我又作了解释。
* @param     int  $aid  文档ID
* @param     int  $typeid  栏目ID
* @param     int  $timetag  时间戳,这个是从数据库查询出来的一串数字,例如1233499432,所在要使用还要转换成人能够看得懂的时间,例如2015-7-11等。
* @param     string  $title  标题
* @param     int  $ismake  是否生成 是否生成html
* @param     int  $rank  阅读权限  也就是我们发布文章时,可以同时设置什么会员可以浏览,需要多少积分等。
* @param     string  $namerule  名称规则 我们建立栏目时,这个可以自己设置,关于这个在获取文档名函数里已经详细分析了关于栏目规则。
* @param     string  $typedir  栏目dir 也就是栏目路径。
* @param     string  $money  需要金币
* @param     string  $filename  文件名称
* @param     string  $moresite  多站点
* @param     string  $siteurl  站点地址
* @param     string  $sitepath  站点路径
* @return    string
功能:返回文档的url,这个是我们在标签中调用使用类似[field:arcurl/]底层模板时调用出来的url,现在知道为什么你在数据库里面找到不arcurl这个字段了吧。这个本不是字段,当然,你在数据库里面就找不到,因为,这个是由这个函数生成的文章url。
分析代码开始:
获取文件名,直接调用函数GetFileName()调用当前文件名,例如:$articleUrl=/a/webbase/div-css/123.html
处理站点路径:$sitepath = MfTypedir($sitepath),这里通过函数把站点路径里面的{cmspath}等符号去掉。这个站点路径指的是类似:{cmspath}/a/webbase这样的路径,这样通过函数MfTypedir()函数处理后,就变成了/a/webase。
判断是不是我们在后台开启了使用绝对网址:if($GLOBALS['cfg_multi_site']=='Y')
当我们安装完程序后,织梦默认是没有开启的,如下图所示。

360截图20200110210135005.jpg

若要开启,请点击上面的是,这样就开启了,开启后生成的文章在页都是绝对网址,如下图所示:

360截图20200110210135005.jpg

这样的好处是有利于seo,这样有利于搜索引擎判断你的网站是以http://dedebase.com/ 还是以http://www.dedebase.com/ 作为主页,这样可以使你的网站权重集中到一个网址,这是非常重要的,如果你的首页有多个网址同时收录,那么,你的首页权重会分散,研究过seo都知道这个重要性。
判断$siteurl是否为空,这个指的是在我们建立栏目时,绑定的域名,如下图所示。

在数据库栏目表#@__arctype里面,也能看$siteurl他的影子。如下图所示。

360截图20200110210135005.jpg

如果这个为空,那么,就加上站点根网址,这样前台生成的文章页就变成了带有域名的文章了,类似:www.dedebase.com/a/sebbase/div-css/123.html

  若设置多站点的话,这里就把栏目连接去掉,然后,变成:http://www.dedebase.com/123.html了,代码哪下所示:

            if($moresite==1)
            {
                $articleUrl = preg_replace("#^".$sitepath.'#', '', $articleUrl);
            }

这个我们极少用到,几乎是没有用的对我们站长来说。
若你的文件名没有http://www.dedebase.com,那么,就要加上这个域名,代码如下所示:

            if(!preg_match("/http:/", $articleUrl))
            {
                $articleUrl = $siteurl.$articleUrl;
            }

这个跟第一个条件判断类似,但是,二者判断的对象不同,第一个条件判断的是我们在建立栏目时,如果没有绑定域名;而这一个判断的对象是调用函数GetFileName()后获得的文件名有没有这个域名,通过这些判断,就实现了生成的网页里面的都是以绝对路径的文章内容,这样的好处就是有利于seo。

网友评论