TP6中常用视图,模板操作
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!'; ?>
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/15508472.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?