Dede织梦模板类(静态模板引擎)载入字符串函数LoadSource($str)

admin2020-01-14802

这个函数是非常非常简单的,我们知道动态模板引擎是要缓存文件的,而静态模板引擎也是如此,虽然,动态模板引擎是编译型的引擎,而静态模板引擎则是解释型的引擎,但是,静态模板引擎也需要缓存文件,这缓存的目的是必要的,为什么?这个我们会在以后的教程里详细解释。

这个载入模板字符串函数主要是载入的类似如下模板字符串:

<field:qq itemname="QQ号" autofield="1" type="text" isnull="true" default=""  maxlength="250" page=""></field:qq>
<field:units itemname="计量单位" autofield="1" notsend="0" type="text" isnull="true" islist="1" default=""  maxlength="250" page=""></field:units>
<field:imgurls itemname="图片集合" type="img" isnull="true" default="" rename="" page="split"/>    
<field:body itemname="图集内容" autofield="0" notsend="0" type="htmltext" isnull="true" islist="0" default=""  maxlength="250" page=""></field:body>

最常用的字符串就是:表#@__channeltype里面的字段fieldset值,如下图所示。

image.png

当然,并不是只有这一个表中的信息,还有例如,自定义表单表#@__diyform里面的里面的,字段info值,这些都是织梦系统里面最常用,特别是表#@__channeltype 里面的。当然,这些字段我们可以自己定义,连表都可以自己定义何况里面的字段值呢。
也就是说函数LoadSource($str)里面的$str代表的就是上面的表里面fieldset或info字段值,这些值织梦称之为模板字符串。
这个函数的作用:就是把模板字段串存入到由md5加密的文件名,以.inc为后缀的文件夹data/tplcache/里面,代码如下:

$this->taghashfile = $filename = DEDEDATA.'/tplcache/'.md5($str).'.inc';

然后,判断这个文件是否存在,若不存在则通过函数file_put_contents($filename, $str);直接把$str里面的内容也就是类似上面提到的字符串,复制到文件$filename里面。这个函数就做了这么一点事情,这什么要产到$filename里面呢?

如果不这样,那每次使用解析这个模板字符串,就要查询一下数据库或到其它地方找麻烦。织梦称之为:优化模板字符串存取读取方式,也就是为下面解析模板字符串提供方便。

最后,这个函数调用函数:载入模板函数LoadTemplate($filename);上面做了这么多,其实,就是为这个函数作准备的,看看这个函数里面的参数就知道是刚刚我们放入到缓存目录里面的装有模板字符串的文件$filename 。

与这个函数等价的函数是LoadString($str),这个是织梦模板引擎里面给我们提供的另一个函数,实际上这个函数就是调用的本教程里面的这个函数。

总结:这个函数做了二件事,把模板字符串放入缓存目录data/tplcache/里面,然后,调用载入模板函数。


网友评论