织梦分配指定ID的标记的值函数Assign()
这个函数的在静态模板引擎的里面,非常重要,如果没有这个函数,织梦模板里面的标签就不会调用出内容来,也就是说只有调用这个函数才能使标签调出内容来,从这里可以看出这个标签的重要性了吧!如果没有这个标签,那么,模板引擎将起不到任何作用,对于标签来说,当然,没有模板引擎前面做的工作,那么,这个函数也是没有什么用的,标签之所以,能调出内容来从数据库里面,是一环扣一环,缺一不可。
无论学过smart模板引擎,还是其它像thinkphp都有跟这个功能一样,甚至是名称完全相同的对应的函数,所以,理解这个函数,对于以后你学习其它cms系统或者框架都有很好的作用。
函数名:Assign($i, $str, $runfunc = TRUE)
参数:$i 标签id,在其它文件或标签文件里面一般用$tagid表示;$str 字符串,就是标签对应的底层模板值字符串;$runfunc 运行的函数,就是标签有时候里面会有函数,这时就要通过这个函数来调用函数EvalFunc()。
所在文件:include/dedetag.class.php
代码分析开始:
判断标签当前标签是不是已经设置,若已经设置了,把标签替换标志设置为true,把当前标签的值设置为$str ,即 $this->CTags[$i]->TagValue=$str;
判断一下当前标签里面的function属性是不是存在,若存在且参数$runfunc为true时,调用下面的函数EvalFunc()。可能这地方只这样说不好理解,如果我把标签代码拿出来,就好理解了:
DedeTag Object ( [IsReplace] => 1 [TagName] => description [InnerText] => [StartPos] => 60 [EndPos] => 109 [CAttribute] => DedeAttribute Object ( [Count] => 0 [Items] => Array ( [function] => cn_substr(@me,80) ) ) [TagValue] => 什么是织梦基地?网址就是www.dedebase.com [TagID] => 2 )
请看上面是不是在对象里面有一个[function] => cn_substr(@me,80),上面这行也就是判断一下有没有这个函数,如果有说明标签里有对应字段的处理函数,若有就要调用下面的处理某字段函数EvalFunc()。
最后,一行就是调用处理某字段函数,把处理后的值,也就是底层模板的值,也就是标签调用后的值,赋给$this->Ctags[$i]->TagValue
函数分析结束,这个函数虽然,代码不多。功能不强,还是强调一下,这个函数的强大之处是在于最后,获取当前标记的值,有了这个值,我们在前台才能调出对应的标签的内容来。这个函数在动态模板里面也有,但是,在动态模板里面没有这个代码多,在动态模板里面简单多了。
仅从这一点就可以看出动态模板引擎比静态模板引擎简单,但是,要说哪个好的话,只能说二者各有优点,个人觉得动态模板引擎学起来容易点,静态就比较麻烦,但是,静态的应用非常广泛。