thinkphp5.0学习(九):TP5.0视图和模板

原文地址: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}

转载于:https://www.cnblogs.com/ZhYQ-Note/p/8626135.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#中调用halcon引擎来执行hdev程序

调用halcon引擎有两个直接的好处&#xff1a; 避免C# 与halcon代码混编时可能产生的内存泄露问题 修改halcon程序时不用重新编译C# 勇哥写了一个示例&#xff0c;详细的应用感受和缺点限制勇哥会持续做相关的总结给大家分享。 对于halcon17来说&#xff0c;要运行下面的程序…

Node.js Up and Runing 学习日记(八)

目录 连接池基于一个简单的Socker.io服务器连接池 生产环境通常由多种资源组成: web服务器,缓存服务器和数据库服务器. 数据库服务器通常部署在web服务器之外的独立机器上,这使得面向公众的网站不必重新配置和修改复杂的数据库群就可以垂直增长了. 基于 为每一个请求创建一个甚…

036有效的数独

1 #include "000库函数.h"2 3 //一看&#xff0c;没想出什么好法子&#xff0c;就遍历了4 //最重要的是如何比较小九宫格的数据5 //44ms6 class Solution {7 public:8 bool isValidSudoku(vector<vector<char>>& board) {9 for (int i …

WinAPI——Windows 消息

消息值 注释 WM_NULL$0000 WM_CREATE$0001 WM_DESTROY$0002 WM_MOVE$0003 WM_SIZE$0005 WM_ACTIVATE$0006 WM_SETFOCUS$0007 WM_KILLFOCUS$0008 WM_ENABLE$000A WM_SETREDRAW$000B WM_SETTEXT$000C WM_GETTEXT$000D WM_GETTEXTLENGTH$000E WM_PAINT$000F WM_CLOSE$0010 WM_QUER…

AciveMQ小结|最后有视频

1 JMS 在介绍ActiveMQ之前&#xff0c;首先简要介绍一下JMS规范。 1.1 JMS的基本构件 1&#xff0e;1&#xff0e;1 连接工厂 连接工厂是客户用来创建连接的对象&#xff0c;例如ActiveMQ提供的ActiveMQConnectionFactory。 1&#xff0e;1&#xff0e;2 连接 JMS Connection封…

Build 2016: 发布明天的云创新来服务今天的开发者

每个企业和行业都在被云潜移默化地改变着。随着云计算的速度、规模和灵活性的不断增加&#xff0c;云服务带来的可能性也在不断被拓展。想象一下&#xff0c;通过监测传感器&#xff0c;一位奶农能够将他的奶牛牛奶产量提高&#xff1b;或是一家医院能够自动监测环境卫生状况&a…

禁用JavaScript之后,你的网站表现如何?

禁用JavaScript之后&#xff0c;你的网站表现如何&#xff1f;一最近要做一个新官网&#xff0c;需求评审完之后&#xff0c;考虑到官网都是纯静态页面&#xff0c;功能简单&#xff0c;操起vue-cli3几秒内创建好了项目脚手架&#xff0c;开发前&#xff0c;我打开了首页模板文…

C# 使用 Windows API 操作控件: SendMessage

在C#中&#xff0c;程序采用了的驱动采用了事件驱动而不是原来的消息驱动&#xff0c;虽然.net框架提供的事件已经十分丰富&#xff0c;但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法&#xff0c;因此在C#中使用消息有时候还是大大提高编程的效率的。定…

对类的理解:

在public class First 表示如果一个类的声明为public&#xff0c;要求该类的类名必须和文件保持一致。在编译 源文件时&#xff0c;让雨果源文件中定义了多个类&#xff0c;那么每个类会形成*.class 文件&#xff0c;执行是&#xff0c;通过Java类名&#xff0c;运行的的是该类…

概率论

概率论转载于:https://www.cnblogs.com/zengkefu/p/7357249.html

Hive安装中遇到过的坑

实现说明每一个用户的环境都有细微的不一致&#xff0c;所以这里只是个人经过这些坑的处理&#xff0c;但是不意味着所有处理都是这样的操作&#xff0c;仅作为参考。 第一个坑 数据库安装&#xff0c;数据库最好装在Linux上&#xff0c;一直出了很多错&#xff0c;这里有一个博…

Halcon:模版匹配

一&#xff1a;函数介绍 1.创建模板 create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID) Template &#xff1a;模板图像 NumLevels&#xff1a;图像金字塔级数&#xff0c;该值越小…

java基础英语---第二十六天

Terminate [ tə:mineit ] 结束 Instantiation [in,stnʃieiʃən] 实例化 Instance declared [diklεəd] 公然的 Access [ əkses ] 进入,接近,入口,通道 Accessible [əksesəbl] 可进入的 invoke [invəuk] 调用 board [bɔ:d] 木板,甲板 MainBoard card [kɑ:d] …

ASP.NET Core部署到Linux服务器(CentOS7 x64)

前言 本文主要讲解如何一步步将ASP.NET Core网站发布到Linux服务器&#xff0c;文中会讲解具体步骤及需要避免的各种问题。 目录 一、环境介绍 二、创建及发布ASP.NET Core网站项目 三、服务器软件安装&#xff08;.NET Core SDK&#xff09; 四、在服务器上部署ASP.NET Core网…

redux进一步优化

1. 将原来的 mapStateToDispatch 中的函数提取出来&#xff0c;放在组件中&#xff0c; 如原来的&#xff1a; function mapStateToProps(state, ownProps) {return {hasMore:state.getIn([tabs,hasMore]),} } function mapDispatchToProps(dispatch) {return {addTabList:(i…

C# : 调用C++动态库(dll)

在实际软件开发过程中&#xff0c;由于公司使用了多种语言开发&#xff0c;在C#中可能需要实现某个功能&#xff0c;而该功能可能用其他语言已经实现了&#xff0c;那么我们可以调用其他语言写好的模块吗&#xff1f;还有就是&#xff0c;由于C#开发好的项目&#xff0c;我们可…

Python3.5以上版本lxml导入etree报错Unresolved reference

Web抓取Web站点使用HTML描述&#xff0c;这意味着每个web页面是一个结构化的文档。有时从中 获取数据同时保持它的结构是有用的。web站点不总是以容易处理的格式&#xff0c; 如 csv 或者 json 提供它们的数据。 这正是web抓取出场的时机。Web抓取是使用计算机程序将web页面数据…

linux设置history历史记录

#说明export HISTSIZE1000 #设置历史记录显示1000行export HISTTIMEFORMAT%F %T #设置历史记录格式 999 2017-08-15 10:58:32 #修改vim /etc/profilesed -i "s/\(HISTSIZE\).*/\11000/" /etc/profilesed -i "/HISTSIZE/aexport HISTTIMEFORMAT%F %T " /et…

STL-容器库101--array【C11】

1. 原型 C11提供 template < class T, size_t N > class array;T&#xff1a; 元素类型&#xff0c;以 array::value_type 作为别名使用&#xff1b;N&#xff1a; array中元素大小&#xff1b; 固定size的序列容器&#xff1b;初始化时&#xff0c; array对象不保存任何…

C#:向C++封送结构体数组

在使用第三方的非托管API时&#xff0c;我们经常会遇到参数为指针或指针的指针这种情况&#xff0c; 一般我们会用IntPtr指向我们需要传递的参数地址&#xff1b; 但是当遇到这种一个导出函数时,我们如何正确的使用IntPtr呢&#xff0c; extern "C" __declspec(dll…