PHP:ThinkPHP5.0视图View模板语法

举报
彭世瑜 发表于 2021/08/14 01:12:43 2021/08/14
【摘要】 1、模板路径 控制器地址 app/index/controller/Index 1 传参示例说明获取模板路径view()默认模板的地址app/index/view/index/index.htmlview(‘upload’)修改文件app/index/view/index/upload.htmlview(‘public/upload’)修改目录app/index/...

1、模板路径

控制器地址

app/index/controller/Index

  
 
  • 1
传参示例 说明 获取模板路径
view() 默认模板的地址 app/index/view/index/index.html
view(‘upload’) 修改文件 app/index/view/index/upload.html
view(‘public/upload’) 修改目录 app/index/view/ipublic/upload.html
view(’./index’) 入口文件同级的模板文件 public/index.html
view(’./html/index’) 入口文件同级的模板文件 public/html/index.html

注意:如果命名为index.html,首先会访问public/index.html,即入口文件的index.html)

2、模板渲染

app/index/controller/Index

view('template', ['name'=>'Peng shiyu'])

  
 
  • 1

app/index/view/index/template.html

{$name}

  
 
  • 1

(1)使用assign和fetch

use think\Controller;

class Index extends Controller
{ public function index() { $this->assign('name', 'Peng shiyu'); return $this->fetch('index', [ 'username'=> 'Tom', 'password'=> '123456', ], [ 'STATIC' => 'THIS IS STATIC' ]); }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

模板替换

{$name}
{$username}
{$password}
STATIC

  
 
  • 1
  • 2
  • 3
  • 4

(2)使用display返回字符串

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{ public function index() { $this->assign('name', 'Peng shiyu'); return $this->display('我的名字叫:{$name} 今年{$age} 岁了', [ 'age'=> 23 ]); }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

显示:

我的名字叫:Peng shiyu 今年23 岁了

  
 
  • 1

变量输出
模板中的变量花括号之间不能有空格

可修改变量前后标识符

template.tpl_begin
template.tpl_end

  
 
  • 1
  • 2

(3)变量赋值(四种)

$this->assign('变量名',$变量值())//继承 think\Controller;

$this->view->变量名 = '变量值'; //继承 think\Controller;

View::share('变量名',$变量名)//引入think\View;

return $this->fetch('html页面',[ '变量名'  => ‘变量值', ],[ '大写字母'  =>  '替换内容'
]); // 继承 think\Controller;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

系统提供的路径常量有:

__URL__ //路由地址
__ROOT__ //根目录
__STATIC__ //static目录
__CSS__ //css目录
__JS__ //js目录

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

可自行在config目录中替换,替换函数为:

’view_replace_str‘ =>  [ '常量名'   =>  '替换路径'
]

  
 
  • 1
  • 2
  • 3

优先级
动态配置 > 自定义配置 > 系统配置

3、模板语言

(1)变量函数

在模板中使用系统变量

{$Think.server.HTTP_HOST}
{$Think.env.PHP_APP_STATUS}
{$Think.session.name}
{$Think.cookie.id}

{$Think.request.id}
{$Think.get.id}
{$Think.post.id}
{$Think.const.APP_PATH} // 获取系统常量
{$Think.APP_PATH} // 获取系统常量,可省略const,直接加常量名

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

模板中嵌入php代码(不建议)

<?php $a = 1; $b = 2; if($a > $b) { echo 'a > b'; } else { echo 'a < b'; }
?>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

模板函数

{$email|md5}
{$email|md5|strtoupper}
{$email|default='123456@qq.com'}
{$email|substr=0,8}
{$email|substr=###,0,8}
{$time|date='Y-m-d',###}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

###起占位的作用,如果是第一个参数可以省略不写

计算表达式

$a+$b
$a-$b
$a*$b
$a/$b
$a%$b
$a+$b*$c
$a++
++$a
$a--
--$a

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

原样输出

{literal} {$email}
{/literal}

  
 
  • 1
  • 2
  • 3

注释

<!-- html注释 用户可见 -->

{/* 模板注释 用户不可见 */}

  
 
  • 1
  • 2
  • 3

(2)循环标签

php代码

public function index() $list = [
{ 'user1' => [ 'name' => 'value1', ], 'user2' => [ 'name' => 'value2', ] ]; $this->assign('list', $list); return $this->fetch('index');
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

volist循环

{php} $empty = "<h1>内容是空的<h2>";  // 注意结尾的分号
{/php}


{volist name='list' id='ov' key='i' offset='0' length='2' mod='1' empty='$empty'} {$mod}  // 取余结果 {$i}   // 循环次数 默认i {$ov.name}
{/volist}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

foreach循环

{foreach $list as $vo} {$vo.name}
{/foreach}

  
 
  • 1
  • 2
  • 3
{foreach name='list' item='vo' key='key'} {$key} <!-- 数组下标 默认$key --> {$vo.name}
{/foreach}

  
 
  • 1
  • 2
  • 3
  • 4

for循环

{for start='1' end='10' step='2' name='i'} {$i} <!-- 默认i-->
{/for}

  
 
  • 1
  • 2
  • 3

(3)比较标签

相等

<!-- eq 或者 equal -->
{eq name='a' value='$b'} <p>equal</p>
{else} <p>not equal</p> 
{/eq}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

不相等

<!-- neq 或者 notequal -->
{neq name='a' value='10'} <p>not equal</p>
{else} <p>equal</p> 
{/neq}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

大于

<!-- gt -->
{gt name='a' value='10'} <p>greater than</p>
{else} <p>not greater than</p> 
{/gt}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

小于

<!-- lt -->
{lt name='a' value='10'} <p>less than</p>
{else} <p>not less than</p> 
{/lt}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

大于等于

<!-- egt -->
{egt name='a' value='10'} <p>equal or greater than</p>
{else} <p>less than</p> 
{/egt}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

小于等于

<!-- elt -->
{elt name='a' value='10'} <p>equal or less than</p>
{else} <p>greater than</p> 
{/elt}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(4)条件判断

switch

{switch name="Tink.get.level"} {case value="1|2"}1{/case} <!--多值竖线分隔--> {case value="3"}2{/case} {case value="4"}3{/case} {default /}4
{/switch}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

range

<!-- in -->
{range name="Think.get.level" value="1,2,3" type="in"} <p>in</p>
{else} <p>not in</p>
{/range}

{in name="Think.get.level" value="1,2,3"} <p>in</p>
{else} <p>not in</p>
{/in}

<!-- notin -->
{range name="Think.get.level" value="1,2,3" type="notin"} <p>not in</p>
{else} <p>in</p>
{/range}

{notin name="Think.get.level" value="1,2,3"} <p>not in</p>
{else} <p>in</p>
{/notin}

<!-- between -->
{range name="Think.get.level" value="1,3" type="between"} <p>between</p>
{else} <p>not between</p>
{/range}

{range name="Think.get.level" value="1,3" type="notbetween"} <p>not between</p>
{else} <p>between</p>
{/range}

  
 
  • 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

defined

<!-- defined -->
{defined name="APP_PATH"} <p>defined</p>
{else} <p>not defined</p>
{/defined}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

if

<!-- if AND/OR-->
{if condition="($Think.get.level == 1) AND ($Think.get.id == 10)"} <p>success</p>
{else} <p>fail</p> 
{/if}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、模板布局

(1)模版引入

{include file="common/nav" /}

  
 
  • 1

(2)模板继承

{extend name="common/base" /}

  
 
  • 1

被继承的文件预留坑位, 继承后可以重写

{block name="ID"} 原始内容
{/block}

  
 
  • 1
  • 2
  • 3

继承后可以保留原有内容

{block name="ID"} 重写内容 + {__block__}
{/block}


  
 
  • 1
  • 2
  • 3
  • 4

(3)layout布局

开启布局配置 config.php

'template'=>[ 'layout_on'=>true, 'layout_name'=>'layout'
]


  
 
  • 1
  • 2
  • 3
  • 4
  • 5

app/index/view/layout.html 预留坑位

{__CONTENT__}

  
 
  • 1

总结

1、安装
2、配置 config Config
3、url路由
4、请求参数
5、响应
6、模板 标签,流程控制,模板布局,引入,继承

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/88595682

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。