您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp5学习笔记-视图和模板
发布时间:2018-06-14 21:46:08编辑:雪饮阅读()
数据分页、模板包含、模板包含的变量传递、模板定位
控制器中:
public function userlist(){
//调用分页,让每页只显示3条数据
$list=sUser::paginate(3);
$this->assign('list',$list);
$this->assign('count',count($list));
return $this->fetch();
}
模板中:
{include file="user/header" title="雪饮" keywords="杜敏捷"/}
<body>
<ul>
{volist name="list" id="user"}
<li>Id:{$user.id}---name:{$user.username}</li>
{/volist}
</ul>
{$list->render()}
</body>
{include file="user/footer" /}
子模板header中:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="keywords" content="[keywords]">
<title>[title]</title>
</head>
子模板footer中:
</html>
解析:
在模板中{$list->render()}是调用控制器中的数据分页的样式的
模板中include包含子模板时可以传递参数,参数可以是多个,实例如这里包含user控制器的header模板一样,而在子模板中获取传递的参数只需要用中括号将变量名传入即可获取。
模板定位:
在配置文件config.php中view_path项可以自定义配置模板的具体存储目录。
配置后访问下你的action,若你的模板文件结构还是原来的,则会报错,参考报错信息中的路径信息将你原来的模板放到报错信息中提到的对应的路径中即可。
布局管理器layout:
若某个控制器下有n个模板,则可以组织结构到布局管理器layout中.
例如,user控制器下有header和footer两个模板
那么我们可以在user控制器的模板文件所在目录的上级目录即view目录建立布局管理器layout文件,比如文件名就叫layout.html
那么
布局管理器内容:
{include file="user/header" title="雪饮" keywords="杜敏捷"/}
这里使用了layout模板布局
{__CONTENT__}
{include file="user/footer" /}
模板中调用布局管理器:
{layout name="layout" /}
<body>
<ul>
{volist name="list" id="user"}
<li>Id:{$user.id}---name:{$user.username}</li>
{/volist}
</ul>
{$list->render()}
</body>
这里模板中引入布局管理器后,模板的内容将会被会被嵌套与布局管理器中的变量{__CONTENT__}中。
模板中调用布局管理器-全局自动调用:
模板中调用布局管理器虽然好,可是要每个模板都来调用就比较麻烦,使用自动调用就比较方便了。
在config.php文件中template配置段中新增配置layout_on的值为true即可。
同理,在template配置段中新增layout_name和layout_item分别配置要载入的layout的名称和layout中嵌套变量名的配置。
所以默认的layout全局配置应该是:
'layout_on'=>true,
'layout_name'=>'layout',
'layout_item'=>'{__CONTENT__}'
设置个别模板中不调用layout
某些专题类模板不需要和全局风格统一,所以需要不调用layout,但是设置了全局自动调用后,无论你是否手动调用他都会调用的,此时就需要在该模板中单独来关闭layout。
在模板中使用“{__NOLAYOUT__}”标签就可以不调用全局的自动载入的layout。
模板标签左右边界符的配置:
在模板中标签的左右边界符也是可以修改的。
通过config.php中的taglib_begin和taglib_end进行配置。
如这两项配置修改为:
'taglib_begin' => '{<',
'taglib_end' => '>}',
那么原来模板中volist标签调用:
{volist name="list" id="user"}
<li>Id:{$user.id}---name:{$user.username}</li>
{/volist}
就要修改为:
{<volist name="list" id="user">}
<li>Id:{$user.id}---name:{$user.username}</li>
{</volist>}
才能生效
模板替换:
对于模板中某些代码,可以在控制器输出模板之前先进行替换。
如模板内容为:
<body>
<img src="__PUBLIC__/dmj.jpg" />
</body>
控制器中模板输出的时候调用:
$this->view->replace(['__PUBLIC__'=>'/dmj']);
则最终输出的图片标签的src就是"/dmj/dmj.jpg"
模板替换-整个控制器
如果某个控制器的所有action都需要使用统一的模板替换,则可以显式声明该控制器的构造方法,然后在构造方法中增加该替换语句。
如:
public function __construct(){
parent::__construct();
$this->view->replace(['__PUBLIC__'=>'/dmj']);
}
关键字词:thinkphp5,视图,模板