1、模板路径
控制器地址
app/index/controller/Index
注意:如果命名为index.html,首先会访问public/index.html,即入口文件的index.html)
2、模板渲染
app/index/controller/Index
view('template', ['name'=>'Peng shiyu'])
app/index/view/index/template.html
{$name}
(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' ]); }
模板替换
{$name} {$username} {$password} STATIC
(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
显示:
我的名字叫:Peng shiyu 今年23 岁了
变量输出
模板中的变量花括号之间不能有空格
可修改变量前后标识符
template.tpl_begin template.tpl_end
(3)变量赋值(四种)
$this->assign('变量名',$变量值(名)); //继承 think\Controller; $this->view->变量名 = '变量值'; //继承 think\Controller; View::share('变量名',$变量名); //引入think\View; return $this->fetch('html页面',[ '变量名' => ‘变量值', ],[ '大写字母' => '替换内容' ]); // 继承 think\Controller;
系统提供的路径常量有:
__URL__ //路由地址 __ROOT__ //根目录 __STATIC__ //static目录 __CSS__ //css目录 __JS__ //js目录
可自行在config目录中替换,替换函数为:
’view_replace_str‘ => [ '常量名' => '替换路径' ]
优先级
动态配置 > 自定义配置 > 系统配置
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,直接加常量名
模板中嵌入php代码(不建议)
<?php $a = 1; $b = 2; if($a > $b) { echo 'a > b'; } else { echo 'a < b'; } ?>
模板函数
{$email|md5} {$email|md5|strtoupper} {$email|default='123456@qq.com'} {$email|substr=0,8} {$email|substr=###,0,8} {$time|date='Y-m-d',###}
###起占位的作用,如果是第一个参数可以省略不写
计算表达式
$a+$b $a-$b $a*$b $a/$b $a%$b $a+$b*$c $a++ ++$a $a-- --$a
原样输出
{literal} {$email} {/literal}
注释
<!-- html注释 用户可见 --> {/* 模板注释 用户不可见 */}
(2)循环标签
php代码
public function index() $list = [ { 'user1' => [ 'name' => 'value1', ], 'user2' => [ 'name' => 'value2', ] ]; $this->assign('list', $list); return $this->fetch('index'); }
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}
foreach循环
{foreach $list as $vo} {$vo.name} {/foreach}
{foreach name='list' item='vo' key='key'} {$key} <!-- 数组下标 默认$key --> {$vo.name} {/foreach}
for循环
{for start='1' end='10' step='2' name='i'} {$i} <!-- 默认i--> {/for}
(3)比较标签
相等
<!-- eq 或者 equal --> {eq name='a' value='$b'} <p>equal</p> {else} <p>not equal</p> {/eq}
不相等
<!-- neq 或者 notequal --> {neq name='a' value='10'} <p>not equal</p> {else} <p>equal</p> {/neq}
大于
小于
<!-- lt --> {lt name='a' value='10'} <p>less than</p> {else} <p>not less than</p> {/lt}
大于等于
<!-- egt --> {egt name='a' value='10'} <p>equal or greater than</p> {else} <p>less than</p> {/egt}
小于等于
<!-- elt --> {elt name='a' value='10'} <p>equal or less than</p> {else} <p>greater than</p> {/elt}
(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}
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}
defined
<!-- defined --> {defined name="APP_PATH"} <p>defined</p> {else} <p>not defined</p> {/defined}
if
<!-- if AND/OR--> {if condition="($Think.get.level == 1) AND ($Think.get.id == 10)"} <p>success</p> {else} <p>fail</p> {/if}
3、模板布局
(1)模版引入
{include file="common/nav" /}
(2)模板继承
{extend name="common/base" /}
被继承的文件预留坑位, 继承后可以重写
{block name="ID"} 原始内容 {/block}
继承后可以保留原有内容
{block name="ID"} 重写内容 + {__block__} {/block}
(3)layout布局
开启布局配置 config.php
'template'=>[ 'layout_on'=>true, 'layout_name'=>'layout' ]
app/index/view/layout.html 预留坑位
{__CONTENT__}
总结
1、安装
2、配置 config Config
3、url路由
4、请求参数
5、响应
6、模板 标签,流程控制,模板布局,引入,继承