织梦分配指定ID的标记的值函数Assign()

admin2023-01-171048

这个函数的在静态模板引擎的里面,非常重要,如果没有这个函数,织梦模板里面的标签就不会调用出内容来,也就是说只有调用这个函数才能使标签调出内容来,从这里可以看出这个标签的重要性了吧!如果没有这个标签,那么,模板引擎将起不到任何作用,对于标签来说,当然,没有模板引擎前面做的工作,那么,这个函数也是没有什么用的,标签之所以,能调出内容来从数据库里面,是一环扣一环,缺一不可。

无论学过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

函数分析结束,这个函数虽然,代码不多。功能不强,还是强调一下,这个函数的强大之处是在于最后,获取当前标记的值,有了这个值,我们在前台才能调出对应的标签的内容来。这个函数在动态模板里面也有,但是,在动态模板里面没有这个代码多,在动态模板里面简单多了。

仅从这一点就可以看出动态模板引擎比静态模板引擎简单,但是,要说哪个好的话,只能说二者各有优点,个人觉得动态模板引擎学起来容易点,静态就比较麻烦,但是,静态的应用非常广泛。


网友评论