原文地址:http://blog.****.net/self_realian/article/details/75214922
模板变量输出、替换和赋值
我们看一下文件编译的结果,我们知道我们现在写的是一个html文件,但是我们当前的系统是php,我们的模板最终也会编译成php文件执行,输出我们想要的结果,它编译的文件在runtime/temp目录下,找到对应的编译文件
首先我们看见,如果我们在系统中没有定义“THINK_PATH”这个变量,就会退出,说明我们当前这个文件必须在ThinkPHP环境下才能执行,这样它就不呢直接访问我们的temp文件,来获取我们文件中的内容,上边的那个其实就是一个安全机制。紧接着就是我们编写的代码了。我们会看到 它把包裹变量的两个花括号变成了<?php 和 ?>.也就是说我们在模板中输出变量的花括号最终会被编译成PHP的<?php 和 ?>,然后里边是echo 出变量,这就是模板的执行流程。它首先让我们在html文件中编写正常的html,通过固定的标签来标记我们变量的开始和结束,之后在我们执行过程中,它会生成缓存或编译文件,最终我们程序其实是执行了那个编译文件。现在我们看一下,为什么我们使用花括号就能输出变量,能否使用其它的标记呢?
我们来看一下thinkphp的配置文件(convention.php),找到模板配置部分,直接拷贝到应用配置文件中
这两个就是定义模板的开始和结束的标记的,当然我们也可以改,但是不建议改,如果小伙伴们想试一下也是可以的,我这里就不截图了。(注意我们输出的变量和花括号中间是不能有空格的,否则不能正常输出变量的值)
接下来我们看看,还能使用哪些方式能对页面的变量赋值。我们知道我们可以通过fetch()的第二个参数赋值。第二种方式,之前也介绍过,可以通过$this->assign()的方法。第三种方法,是通过$this->view获取view对象,然后给view对象设置属性值,比如:$this->view->name =‘chen’
在ThibPHP5.0.4之后,在think下的view类中,为我们提供了一个静态方法,我们可以直接通过静态方法,来对我们的页面赋值
这几种给模板中分配变量的方式,同时可用。系统会将这四种方式传递的变量进行合并,统一向我们的页面中进行分配,这样我们就可以在我们的页面中使用这些值
我们知道,通过fetch()函数,我们可以传递第三个参数,第三个参数的key就是我们要替换的字符串,值就是我们替换之后把的内容
另外,我们可以通过修改配置文件中,进行修改,来统一的向我们所有的模板中进行一个变量替换的配置,我们依然打开convention.php
另外,我们可以通过修改配置文件中,进行修改,来统一的向我们所有的模板中进行一个变量替换的配置,我们依然打开convention.php
将它复制到应用配置文件中,然后进行修改
比如我想将 ‘__123__’修改成‘__一二三__’
可以这样配置
然后我们可以回到模板中直接进行输出
系统还提供了一些默认的字符串替换,比如__URL__(得到的是当前模块名和当前控制器名)、__STATIC__(得到的是/static也就是根下的static目录即public/static目录),thinkphp是一个单入口文件,所有的请求都会落到public/index.php,在我们安装好这个框架之后,public就会默认有一个static目录,我们之前介绍目录的时候介绍过,这个static目录是用来放静态文件的。我们在模板中经常会使用到static下的一些文件,比如说:css样式,js代码,图片等。我们就可以通过__STATIC__来代替/static目录。还有__JS__,它表示的是/static/js这个目录。__ROOT__,它表示的是框架所在的目录下的public目录,在我这里是/ThinkPHP5.0/public。__CSS__它表示的是/static/css目录
比如我们现在想使index.html这个页面变成红色,我们再static/css目录下写一个style.css文件,然后在index.html中引入该样式
当我们使用__CSS__这种系统定义好的常量,会给我们提供很大的方便。比如说我们不想将我们的样式放在public/static目录,我们只想直接放在根目录,也就是public目录下,比如说创建一个front目录,里边全放前端的样式。当我们修改了样式的位置之后,如果我们使用的是之前的那种传统的引入样式的方法,我们就需要修改我们整个项目的样式的路径,但是我们使用了__CSS__这种之后,我们只需要在我们的当前模块配置文件中进行修改即可,比如我们现在修改__CSS__默认对应的目录
这样我们在模板中使用__CSS__对应的就是/front/css目录。通过简单的配置就能改变项目中所有样式相关的路径,这对我们后期的维护是相当方便的。这些默认的替换在thinkphp/library/think/View.php
注意配置的读取顺序,也就是优先级。最先读取的是框架的默认配置,如果我们在对应的模块中对这些配置进行了修改,那么它最终会使用模块中的配置