# 第9章 TP5.0視圖和模板
========================================================================
## 1、視圖
### a) 加載頁面
1、繼承系統控制器類
return $this->fetch(參數1,參數2,參數3,參數4);
參數1(字符串): 模板渲染
參數2(數組): 模板賦值
參數3(數組): 模板替換
參數4(數組):
2、使用助手函數
// return view();
# view的參數與fetch相同
3、使用view類 (不建議)
$view=new View();
return $view->fetch();
### b) 模板賦值
1、控制器類中的assign方法
// $this->assign('name',$name);
// $this->assign('city',$city);
// 加載頁面
// return view();
2、通過fetch方法
// return $this->fetch('',['name'=>$name,'city'=>$city]);
3、助手函數
// return view('',['name'=>$name,'city'=>'西安']);
4、對象賦值
$this->view->name="浩哥";
$this->view->city="臨汾";
return view();
### c) 模板替換
1、配置文件更改(全局替換)
// 視圖輸出字符串內容替換
'view_replace_str' => [
'__HOMES__'=>'/static/home/public',
'__ADMINS__'=>'/static/admin/public',
],
2、部分替換
1、fetch 方法
return $this->fetch('',[],['__HOMES__'=>'/static/home/public']);
2、view 函數
return view('',[],['__HOMES__'=>'/static/home/public']);
### d) 模板渲染
1、默認加載當前模塊 當前控制器 當前方法對應的頁面
// return $this->fetch();
2、加載當前模塊 當前控制器下的 用戶定義頁面
// return $this->fetch('jiazai');
3、加載當前模塊 User控制器 jiazai頁面
return $this->fetch('User/jiazai');
## 2、模板
### 1、模板標簽
1、普通標簽
// 模板引擎普通標簽開始標記
'tpl_begin' => '<{',
// 模板引擎普通標簽結束標記
'tpl_end' => '}>',
<h2>{$str}</h2>
2、標簽庫標簽
// 標簽庫標簽開始標記
'taglib_begin' => '{',
// 標簽庫標簽結束標記
'taglib_end' => '}',
{for start="1" end="10"}
{$i}
{/for}
### 2、輸出變量
1、字符串
$this->assign("str","TP5.0 非常簡單非常適合初學者");
<h2>{$str}</h2>
2、數組
$data=[
'name'=>'張三',
'age'=>18,
'sex'=>'妖'
];
$this->assign("data",$data);
<h2>{$data['name']}</h2>
<h2>{$data.age}</h2>
### 3、使用函數
1、豎線
<h2>{$pass|md5}</h2>
<!-- <h2><?php echo md5($pass); ?></h2> -->
<h2>{$time|date="Y-m-d H:i:s",###}</h2>
<!-- <?php echo date("Y-m-d H:i:s",$time);?> -->
<h2>{$pass|md5|strtoupper|substr=0,10}</h2>
<!-- <h2><?php echo substr(strtoupper(md5($pass)),0,10); ?></h2> -->
2、冒號開始
<h2>{:md5($pass)}</h2>
<h2>{:date('Y-m-d H:i:s',$time)}</h2>
### 4、默認值
<h2>{$name|default="小云"}</h2>
<h2><?php echo (isset($name) && ($name !== '')?$name:"小云"); ?></h2>
### 5、三元運算符
<h2>{$status?'正常':'錯誤'}</h2>
<h2>{$status>2?'正常':'錯誤'}</h2>
<h2><?php echo !empty($status) && $status>2?'正常':'錯誤'; ?></h2>
### 6、運算符
<h2>{$a}+{$b}={$a+$b}</h2>
<h2>{$a}-{$b}={$a-$b}</h2>
<h2>{$a}*{$b}={$a*$b}</h2>
<h2>{$a}/{$b}={$a/$b}</h2>
<h2>{$a}%{$b}={$a%$b}</h2>
<h2>{$a++}</h2>
<h2>{$b--}</h2>
### 7、原樣輸出
{literal}
<h2>hello {$name}</h2>
{/literal}
### 8、系統變量
1、系統變量
支持輸出 $_SERVER 、 $_ENV 、$_POST 、$_GET 、$_REQUEST 、 $_SESSION 和$_COOKIE變量。
<h1>{$_GET['id']}</h1>
<h1>{$Think.get.id}</h1>
<h1>{$_SERVER['HTTP_HOST']}</h1>
<h1>{$Think.SERVER.http_host}</h1>
2、常量輸出
# 常量詳見附錄
<h1>{$Think.const.app_path}</h1>
<h1>{$Think.app_path}</h1>
<h1>{$Think.ds}</h1>
<h1>{$Think.think_path}</h1>
<h1>{$Think.IS_WIN}</h1>
<h1>{$Think.THINK_VERSION}</h1>
3、配置文件輸出
# 常看配置文件
<h2>{$Think.config.app_namespace}</h2>
<h2>{$Think.config.default_lang}</h2>
### 9、模板注釋
<h1>{//$_GET['id']}</h1>
<h1>{/*$Think.get.id*/}</h1>
### 10、包含文件
{include file="Public/header"}
{include file="Public/footer,Public/footer"}
### 11、模板布局
1、在視圖目錄下新建文件 layout.html
(C:\AppServ\www\tp5\application\admin\view)
2、在layout.html頁面中
將所有的公共頁面保留,非公共頁面使用{__CONTENT__}替代
# {__CONTENT__} 只能存在一個
3、頁面中如何書寫
# 引入模板布局
{layout name="layout"/}
# 非公共區域內容
<!-- 內容 -->
<div class="col-md-10">
<div class="jumbotron">
<img src="__ADMINS__/img/4.jpg"height="310px" width="100%" alt="">
<h2>聯想 后臺管理系統</h2>
<p>開發者 : 趙豐泰</p>
</div>
</div>
### 12、模板繼承
1、在視圖目錄下新建base.html
2、在base.html中對頁面進行分割
<div class="container">
{block name="nav"}{/block}
<div class="row body">
{block name="menu"}{/block}
{block name="main"}{/block}
</div>
</div>
3、使用繼承
{extend name="base" /}
{block name="nav"}
{include file="public/nav" /}
{/block}
{block name="main"}
<div class="jumbotron">
<h2>聯想 后臺管理系統</h2>
<p>開發者 : 趙豐泰</p>
</div>
{/block}
### 13、內置標簽
1、volist循環
name 需要遍歷的數據
id 類似于foreach中 value
offset 截取數據起始位置
length 截取數據的個數
mod 奇偶數
empty 數據為空的使用
key 編號
2、foreach循環
name 需要遍歷的數據
item 類似于foreach中的value
key 類似于foreach中的key
{foreach name="data" item="val" key="abc"}
<p> {$abc} {$val.id} {$val.name}</p>
{/foreach}
3、for循環
start 開始值
end 結束值
comparison 比較條件
step 步數
name 循環變量名 默認 i
{for start="0" end="10" comparison="elt" step="2" name="abc"}
<p>{$abc}</p>
{/for}
{for start="10" end="0" comparison="gt" step="-1"}
<p>{$i}</p>
{/for}
4、比較標簽
{eq name="a" value="11"}正確{/eq}
{neq name="a" value="11"}正確{/neq}
{lt name="a" value="11"}正確{/lt}
{gt name="a" value="11"}正確{/gt}
{egt name="a" value="11"}正確{/egt}
{elt name="a" value="11"}正確{/elt}
{heq name="a" value="11"}正確{/heq}
{nheq name="a" value="11"}正確{/nheq}
5、if
{if condition="$a eq $b"}
<p>a和b數值相等</p>
{else /}
<p>a和b數值不相等</p>
{/if}
6、switch
{switch name="week"}
{case value='1'}周一{/case}
{case value='2'}周二{/case}
{default /} 周日
{/switch}
7、in 和notin比較類似
{in name="week" value="0,1,2,3,4,5,6"}
合法的數據
{else /}
不合法數據
{/in}
8、between 和 notbetween
{between name="week" value="0,6"}
合法數據
{else/}
非法數據
{/between}
9、原生PHP
{php}
echo "123";
{/php}
<?php
echo "456";
?>
10、嵌套使用