一、模板定位
1、模板渲染规则
模板渲染使用\think\View类的fetch方法,渲染规则为:
模块@控制器/操作
如果没有调用任何参数的fetch方法:
return $view->fetch();
如果指定操作调用:
return $view->fetch('模板名称');
如果调用控制器的某个模板文件使用:
return $view->fetch('控制器/模板');
如果跨模块调用模板
return $view->fetch('模块@控制器/模板');
如果全路径模板调用:
return $view->fetch(APP_PATH.request()->module().'/文件所在的位置');
二、模板标签
模板内的标签我们都是可以在配置文件【application/ config.php】中进行修改的。
普通标签
我们使用的开始、结束标签,因此我们的普通标签例如{$name}
标签库标签
标签库标签可以用于模板变量输出、文件包含、条件控制、循环输出等功能,而且完全可以扩展功能。
那么原来的
{eq name="name" value="value"}
相等
{else/}
不相等
{/eq}
就需要改成
<eq name="name" value="value">
相等
<else/>
不相等
</eq>
三、变量输出
如果我们在控制器中模板变量为一个字符串,那么我们在模板中就可以使用{$变量名},来进行输出变量
如果我们在控制器中模板变量为一个数组,那么我们在模板中就可以使用下面的方法输出变量
eg:{$数组.name}、{$data.email}
或 {$data['name']} 、{$data['email']}
如果data变量是一个对象(并且包含name和email两个属性),那么就可以用下面的方式输出
Name:{$data:name}
Email:{$data:email}
或者
Name:{$data->name}
Email:{$data->email}
模板中支持使用多个函数,需要我们用 | 来进行分割。
模板中我们可以给变量输出提供默认值
eg:{$user.nickname|default="你猜"}
在模板中我们可以使用literal标签来防止模板标签被解析。
{literal}
Hello,{$name}!
{/literal}
上面的{$name}标签被literal标签包含,因此不会被模板引擎解析,会保持原样输出
四、模板布局
全局配置方式
全局配置方式,需要我们修改配置文件【application/config.php】
'template' => [
'layout_on' => true,
'layout_name' => '布局入口文件名',
]
开启layout_on后,首先会走一遍布局入口文件名,然后再走我们需要渲染数据的文件。
引入普通文件
{include file="public/header" /}
{__CONTENT__}
{include file="public/footer" /}
{__CONTENT__},会把解析后的内容替换到layout布局模板文件的content特定字符串
引入模板
{include file="../application/index/view/index/header.html" /}
五、模板继承
每个区块由{block}{/block}标签组成,block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,其中可以包含然和模板内容,其他标签和变量。
{extend name="base" /}
我们可以使用extend来继承文件base.html
在子模板中,可以对基础模板中的区块进行重载定义,如果没有重新定义的话,则表示沿用基础模板中的区块定义,如果定义了一个空的区块,则表示删除基础模板中的该区块内容。在当前子模板中,只能定义区块而不能定义其他的模板内容,否则将会直接忽略,并且只能定义基础模板中已经定义的区块。
本文详细介绍了ThinkPhp5.0中的模板定位、模板标签、模板变量输出、模板布局以及模板继承。通过fetch方法解析模板规则,包括模块、控制器和操作的调用方式。在模板标签部分,讲解了普通标签和标签库标签的使用,以及如何输出数组和对象的属性。还阐述了模板布局的全局配置和模板继承的概念,如何重载和删除基础模板的区块。
1377

被折叠的 条评论
为什么被折叠?



