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!'; ?>