TP6中常用视图操作
第一步:安装模板引擎
composer require topthink/think-view
第二步:模板赋值和加载模板:
引入模板操作类:
use think\facade\View;
模板赋值
// 模板变量赋值 View::assign('name','ThinkPHP'); View::assign('email','thinkphp@qq.com'); // 或者批量赋值 View::assign([ 'name' => 'ThinkPHP', 'email' => 'thinkphp@qq.com' ]);
加载模板
return View::fetch('index');
或者使用助手函数:
return view('index', [ 'name' => 'ThinkPHP', 'email' => 'thinkphp@qq.com' ]);
个人习惯用法:
$return_data['data_list'] = $data_list; // 获取分页显示 $return_data['page'] = $data_list->render(); return view("user/user_role_list",$return_data);
将需要赋值到模板中的变量统一放到 $return_data 里面
然后使用 view 助手函数统一返回,这样也不用加载视图类,又方便操作
第三步:模板渲染
默认模板位置:
在TestTemplate控制器中的template01操作里面,
不写模板名称,如下,默认模板位置是:
return View::fetch();
默认模板位置:app/view/test_template/template01.html
TestTemplate控制器指定模板文件:
return View::fetch('edit');
则模板文件为: app/view/test_template/edit.html
指定目录和模板文件
return View::fetch('member/edit');
表示加载 member目录下的edit.html 文件
跨应用指定目录和模板文件
return View::fetch('admin@member/edit');
第四步:变量输出
输出变量:
{$name}
输出数组:
{$user.user_name}
{$user.age}
或
{$user['user_name']}
{$user['age']}
如果是多维数组,采用后面的方式
输出对象:
{$user->user_name}
{$user->age}
系统变量输出:
{$Request.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量 {$Request.session.user_id} // 输出$_SESSION['user_id']变量 {$Request.get.page} // 输出$_GET['page']变量 {$Request.cookie.name} // 输出$_COOKIE['name']变量
系统变量通常以{$Request.打头
// 调用Request对象的controller方法 {$Request.controller} // 调用Request对象的action方法 {$Request.action} // 调用Request对象的host方法 {$Request.host} // 调用Request对象的ip方法 {$Request.ip}
常量输出:
//输出PHP的版本 {$Think.PHP_VERSION} //输出THINKPHP的版本 {:think\\App::VERSION}
第五步:模板中使用函数
{$data.name|md5} 编译后结果是: <?php echo htmlentities(md5($data['name'])); ?>
htmlentities是系统默认添加的,避免XSS的攻击
你可以自己设定过滤方法,在配置文件中 template.php 中设置
'default_filter' => 'htmlspecialchars'
原样输出:
{$data.name|raw}
其他函数:
//转化为时间格式 {$data.create_time|date='Y-m-d H:i'} {$data.number|format='%02d'} //多个参数 {$data.name|substr=0,3} //多个函数 {$name|md5|upper|substr=0,3}
也可以这样写,更直观也推荐这种写法
{:substr(strtoupper(md5($name)),0,3)}
第六步:模板中使用运算符
{$user.score+10} //正确的 {$user['score']+10} //正确的 {$user['score']*$user['level']} //正确的 {$user['score']+myFun($user['level'])} //正确的 //三元 {$status? '正常' : '错误'}
原样输出: literal 标签里面的内容不会被解析
{literal} Hello,{$name}! {/literal}
包含文件:
规则为:模块@控制器/操作
{include file="public/header" /} // 包含头部模版header {include file="public/menu" /} // 包含菜单模版menu {include file="blue/public/menu" /} // 包含blue主题下面的menu模版 {include file="public/header,public/menu" /} //包含多个文件
模板输出替换:
在view.php 的配置文件中添加
'tpl_replace_string' => [ '__STATIC__'=>'/static', '__JS__' => '/static/javascript', ]
第七步:内置标签
循环标签
{foreach $list as $key=>$vo } {$vo.id}:{$vo.name} {/foreach}
或
{volist name="list" id="vo"} {$vo.id}:{$vo.name}<br/> {/volist}
条件判断:
{if ( $name == 1) OR ( $name > 100) } value1 {elseif $name == 2 /}value2 {else /} value3 {/if}
或
{if strtoupper($user['name']) == 'THINKPHP' }ThinkPHP {else /} other Framework {/if}
加载资源文件:
{load href="/static/js/common.js" /} {load href="/static/css/style.css" /} {load href="/static/js/common.js,/static/css/style.css" /}
原生标签:
{php}echo 'Hello,world!';{/php} <?php echo 'Hello,world!'; ?>