原文地址:http://blog.csdn.net/fight_tianer/article/details/78602711

一、视图

1.加载页面

1.继承系统控制器类
return $this->fetch(参数1,参数2,参数3,参数4);
参数1(字符串):模板渲染
参数2(数组):模板赋值
参数3(数组):模板替换
2.使用助手函数
return view();
参数与fetch相同
3.使用view类(不建议使用)
$view=new View();
return $view->fetch();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.模板赋值

1.控制器类中的assign方法
$this->assign('name',$name);
$this->assign('city',$city);
$this->assign(['name'=>$name,'city'=>$city]);
return view();
2.通过fetch方法
return $this->fetch('',['name'=>$name,'city'=>$city]);
3.助手函数
return view('',['name'=>$name,'city'=>$city]);
4.对象赋值
$this->view->name="甜甜";
$this->view->city="太原";
return view();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.模板替换

1.配置文件更改(全局替换,所有页面中都被替换)(config文件中)
// 视图输出字符串内容替换
// 只有页面被替换,也就是在php页面中获取不到__HOMES__
'view_replace_str' => [
'__HOMES__'=>'/static/home/public'
],
2.部分替换
1.fetch方法
// fetch参数:页面,变量分配,视图输出字符串内容替换
return $this->fetch('',[],['__HOMES__'=>'/static/home/public']);
2.助手函数
return view('',[],['__HOMES__'=>'/static/home/public']);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4.模板渲染

1.默认加载当前模块,当前控制器,当前方法对应的页面
return $this->fetch();
2.指定加载的页面
// 加载当前模块,当前控制器下,用户定义的页面
return $this->fetch('jiazai');
// 加载当前模块,user控制器下 jiazai页面
return $this->fetch('user/jiazai');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、模板

1.模板标签

1.普通标签(删除了runtime下的temp下的缓存文件再测试)

 // 模板引擎普通标签开始标记
'tpl_begin' => '{',
// 模板引擎普通标签结束标记
'tpl_end' => '}',
  • 1
  • 2
  • 3
  • 4

2.标签库标签(删除了runtime下的temp下的缓存文件再测试)

 // 标签库标签开始标记
'taglib_begin' => '}',
// 标签库标签结束标记
'taglib_end' => '{', {for start="1" end="10"}
{$i}
{/for}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.输出变量

1.字符串

$this->assign("str","甜甜");
<h2>{$str}</h2>
  • 1
  • 2

2.数组

$data=[
'name'=>'张三',
'age'=>18,
'sex'=>'男'
];
$this->assign("data",$data); <h2>{$data['name']}<h2>
<h2>{$data['age']}<h2>
<h2>{$data['sex']}<h2>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.使用函数

//1.使用竖线,参数写在等于号后面
{$data.name|md5}
<?php echo (md5($data['name'])); ?> {$time|date="y-m-d H:i:s",###}
<?php echo (date("y-m-d H:i:s",$time)); ?> {$name|md5|strtoupper|substr=0,10}
<?php echo (substr(strtoupper(md5($name)),0,10)); ?>
//2.冒号开始
{:md5($pass)}
{:date('Y-m-d H:i:s',$time)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4.默认值

{$user.nickname|default="这家伙很懒,什么也没留下"}
  • 1

5.三元运算符

{$status? '正常' : '错误'}
{$status>2? '正常' : '错误'}
  • 1
  • 2

6.算数运算符

{$a}+{$b}={$a+$b}
{$a}-{$b}={$a-$b}
{$a}*{$b}={$a*$b}
{$a}/{$b}={$a/$b}
{$a}%{$b}={$a%$b}
{$a++}
{$b--}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在使用运算符的时候,不再支持常规函数用法,例如:

{$user.score+10} //正确的
{$user['score']+10} //正确的
{$user['score']*$user['level']} //正确的
{$user['score']|myFun*10} //错误的
{$user['score']+myFun($user['level'])} //正确的
  • 1
  • 2
  • 3
  • 4
  • 5

7.原样输出

{literal}
Hello,{$name}!
{/literal}
  • 1
  • 2
  • 3

8.系统变量

1.系统变量($Think开头)
支持输出 $_SERVER、$_ENV、 $_POST、 $_GET、 $_REQUEST、$_SESSION和 $_COOKIE变量。
<h2>{$_GET['id']}</h2>
<h2>{$Think.get.id}</h2> <h2>{$_SERVER['HTTP_HOST']}</h2>
<h2>{$_SERVER.HTTP_HOST}</h2> <h2>{$Think.SERVER.HTTP_HOST}</h2>
2.常量输出(常量详见附录常量参考)
<h2>{$Think.const.app_path}</h2>
<h2>{$Think.const.ds}</h2>
<h2>{$Think.const.think_path}</h2>
<h2>{$Think.const.is_win}</h2>
<h2>{$Think.const.THINK_VERSION}</h2>
3.配置文件输出(查看配置文件)
<h2>{$Think.config.app_namespace}</h2>
<h2>{$Think.config.default_lang}</h2>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

9.请求参数 
支持直接使用request对象

{$Request.get.id}
{$Request.param.name}
  • 1
  • 2

以$Request.开头的变量输出会认为是系统Request请求对象的参数输出。 
支持Request类的大部分方法,但只支持方法的第一个参数。

10.模板注释

{/* 注释内容 */ } 或 {// 注释内容 } 

{/* 这是模板
注释内容*/ }
  • 1
  • 2
  • 3
  • 4

11.页面包含(可以包含多次)

{include file='Public/header'}
<div>body</div>
{include file='Public/footer'}
  • 1
  • 2
  • 3

12.模板布局

1.在视图目录下新建文件layout.html(app\admin\view)
2.在layout页面中将所有的公共页面保留,非公共页面使用{__CONTENT__}替代(__CONTENT__只能存在一个)
3.页面中引入模板布局{layout name="layout" /}+非公共区域内容
  • 1
  • 2
  • 3
  • 4

13.模板继承

1.在视图目录下新建base.html
2.在base.html中对页面进行分割
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div>
{block name="nav"}{/block}
</div>
<div>
{block name="menu"}{/block}
{block name="main"}{/block}
</div>
<div>
{block name="footer"}{/block}
</div>
</body>
</html>
3.使用继承
{extend name="base" /}
{block name="nav"}
{include file="public/header" /}
{/block}
{block name="menu"}
{include file="public/menu" /}
{/block}
{block name="main"}
{include file="public/content" /}
{/block}
{block name="footer"}
{include file="public/footer" /}
{/block}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

14.内置标签

1.volist循环
{volist name="data" id="val" offset="5" length="3"}
<p>{$key}:{$val.id}:{$val.name}</p>
{/volist}
//区分奇数偶数
{volist name="data" id="val" mod="2" empty="暂时没有数据"}
{eq name="mod" value="0"}
<p style="color: red;">{$key}:{$val.id}:{$val.name}</p>
{/eq}
{eq name="mod" value="1"}
<p>{$key}:{$val.id}:{$val.name}</p>
{/eq}
{/volist} name 需要遍历的数据
id 类似于foreach中的value
offset 截取数据的起始位置
length 截取数据的个数
mod 奇数偶数
empty 数据为空时使用
key 编号 2.foreach循环
{foreach name="data" item="val"}
<p>{$key}{$val.id}{$val.name}</p>
{/foreach} name 需要遍历的数据
item 类似于foreach中的value
key 类似于foreach中的key
3.for循环
start 开始值
end 结束值
comparison 比较条件(参看下表),默认lt
step 步数
name 循环变量(默认i)
//正序
{for start="0" end="10" comparison="elt" step="2" name="i"}
{$i}
{/for}
//倒叙
{for start="10" end="0" comparison="gt" step="-1" name="i"}
{$i}
{/for}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
标签 含义
eq或者 equal 等于
neq 或者notequal 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于
4.比较标签
{eq name="a" value="10"}正确{/eq}
{neq name="a" value="10"}正确{/eq}
{gt name="a" value="10"}正确{/eq}
{egt name="a" value="10"}正确{/eq}
{lt name="a" value="10"}正确{/eq}
{elt name="a" value="10"}正确{/eq}
{heq name="a" value="10"}正确{/eq}
{nheq name="a" value="10"}正确{/eq}
5.条件判断
{switch name="week"}
{case value='1'} 周一{/case}
{case value='2'} 周二{/case
{case value='3'} 周三{/case}
{case value='4'} 周四{/case}
{case value='5'} 周五{/case}
{case value='6'} 周六{/case}
{default /} 周日
{/switch}
6.in和notin比较类似
{in name="week" value="0,1,2,3,4,5,6"}
合法的数据
{else /}
不合法的数据
{/in}
7.between和notbetween
{between name="week" value="0,6"}
合法数据
{else /}
不合法的数据
{/between}
8.原生php
{php}
echo "123";
{/php}
<?php
echo "123";
?>
9.嵌套使用
//隔行变色
{volist name="data" id="val"}
{if condition="$key % 2"}
<p style="color: red;">{$key}{$val.id}{$val.name}</p >
{else /}
<p style="color: pink;">{$key}{$val.id}{$val.name}</p >
{/if}
{/volist}
//三行变色
{volist name="data" id="val"}
{php}
$sw=$key%3;
{/php}
{switch name="sw"}
{case value="0"}
<p style="color: red;">{$key}{$val.id}{$val.name}</p >
{/case}
{case value="1"}
<p style="color: blue;">{$key}{$val.id}{$val.name}</p >
{/case}
{case value="2"}
<p style="color: green;">{$key}{$val.id}{$val.name}</p >
{/case}
{/switch}
{/volist}
//多维数组遍历
{volist name="type" id="val"}
<h2>{$val.name}</h2>
{volist name="val.product" id="goods"}
<p>{$goods.name}{$goods.price}</p >
{/volist}
{/volist}

thinkphp5.0学习(九):TP5.0视图和模板的更多相关文章

  1. Django 2.0 学习(07):Django 视图(进阶-续)

    接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...

  2. Django 2.0 学习(02):Django视图和URL(上)

    接上篇博文,接下来我们以具体代码例子来说明Django的基本流程. 创建项目 使用Win+R,输入cmd进图windows命令行模式: 再你想要存放项目工作的磁盘,输入下面命令: django-adm ...

  3. Django 2.0 学习(06):Django 视图(进阶)

    概述 Django中的特方法,该方法代表了Django的Web页面,并且视图具有特定的模板.以博客应用为例进行说明,在博客应用中应该包含下面的视图: 博客主页:显示最近的一些记录: 详细页面:单个详细 ...

  4. Django 2.0 学习(03):Django视图和URL(下)

    接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...

  5. ThinkPHP5.0框架开发--第1章 Tp5.0安装

    ThinkPHP5.0框架开发--第1章 Tp5.0安装 第1章 Tp5.0 安装 ======================================================== 今 ...

  6. ThinkPHP5.0框架开发--第9章 TP5.0视图和模板

    ThinkPHP5.0框架开发--第9章 TP5.0视图和模板 第9章 TP5.0视图和模板 ===================================================== ...

  7. ThinkPHP5.0框架开发--第3章 TP5.0 配置

    ThinkPHP5.0框架开发--第3章 TP5.0 配置 第3章 TP5.0 配置 ========================================================= ...

  8. ThinkPHP5.0框架开发--第2章 TP5.0架构

    ThinkPHP5.0框架开发--第2章 TP5.0架构 第2章 TP5.0架构 ================================================== 上次复习 1.如 ...

  9. ThinkPHP5.0框架开发--第7章 TP5.0数据库操作

    ThinkPHP5.0框架开发--第7章 TP5.0数据库操作 第7章 TP5.0数据库操作 ===================================================== ...

  10. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

随机推荐

  1. 数据竞争检查工具(TSan)

    https://github.com/google/sanitizers/wiki https://github.com/google/sanitizers/wiki/ThreadSanitizerC ...

  2. Vue.js 源码分析(三) 基础篇 模板渲染 el、emplate、render属性详解

    Vue有三个属性和模板有关,官网上是这样解释的: el ;提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标 template ;一个字符串模板作为 Vue 实例的标识使用.模板将会 ...

  3. vue中引入mintui、vux重构简单的APP项目

    最近在学习vue时也了解到一些常用的UI组件,有用于PC的和用于移动端的.用于PC的有:Element(饿了么).iView等:用于移动端APP的有Vux.Mint UI(饿了么).Vant(有赞团队 ...

  4. Gevent工作原理(转)

    作者:大U哥链接:https://www.zhihu.com/question/20703476/answer/15911452来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  5. Zabbix 设置自动添加主机两种方法(自动注册、自动发现)

    在实际生产环境中,我们可能需要将很多台主机添加到 Zabbix Server 里,我们进行手动添加的话,会比较麻烦.费时,而且还容易出错.所以一般我们会设置主机自动注册.这样就比较方便. 官方文档链接 ...

  6. SAP-简单的OALV演示练习

    接上一篇传统ALV:https://www.cnblogs.com/BruceKing/p/11320165.html. 首先介绍下什么是ALV,在R/3 4.6C之前ALV全称为ABAP List ...

  7. easyui datagird 解决行高不一致问题!

    <style>.datagrid-btable .datagrid-cell {padding: 6px 4px;overflow: hidden;text-overflow: ellip ...

  8. JS打开url的几种方法

    在新标签页中打开 window.open(loginurl_withaccout, "_blank"); 下图中根据后台返回的url以及用户名密码字段,以及用户名密码动态生成了带账 ...

  9. BBR加速 Centos

    BBR是什么 BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟. BBR项目地址 https://github.com/goo ...

  10. 实用Javascript调试技巧

    摘要: 高效调试JS代码. 原文:实用Javascript调试技巧分享 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 见过太多同学调试Javascript只会用简单的con ...