一、視圖
1、 視圖組件的構成:
1) 視圖類
View類
Smarty類
2) 模板
Tpl/項目/模塊/***.html
視圖類負責讀取模板內容,並實現字符串替換,最終再輸出給用戶
2、 模板定義
默認的模板文件定義規則:
模板目錄/[分組名/]模塊名/操作名+模板後綴
TMPL_TEMPLATE_SUFFIX
一般情況下,模板的後綴大體使用以下幾種:
.html
.htpl
.tpl
3、 分隔符
因為每個模板設計者的習慣不同,有的人習慣使用“{}” 有的人使用<{}> {**}
在配置文件中,可以設置以下兩個配置選項,表示配置模板的分隔符
'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
4、 模板賦值以及輸出
1) $this->assign(‘模板變量名’,變量);
$var = '手機';
$this->assign('var',$var);
$this->display('test');
2) $this->assign(數組變量);
<{$數組元素下標}>
<!-- 直接用數組的下標來取數據 -->
<{$price}><br/>
<{$address}><br/>
$var = '手機';
$this->assign('var',$var);
$arr['price'] = 33.3;
$arr['address'] = '北京';
$this->assign($arr);
$this->display('test');
}
3)$this->display(‘操作名’)
當前模塊下的指定操作名.html模板
4)$this->display(‘模塊:操作名’); //模板是可以跨模塊調用的
引用指定模塊下的指定的操作名.html模板
5)$this->display(‘操作’,’輸出編碼’,’輸出類型’);
//跨模塊輸出
$this->display('User:login','utf-8','text/html');
5、 模板替換(模板常量)
在項目中經常要引用css、js、圖片的資源需要引用。
__PUBLIC__:當前網站的公共目錄
__APP__: 當前項目的URL地址
__GROUP__:當前分組的URL地址
__URL__:當前模塊的URL地址
__ACTION__:當前操作的URL地址
在tp中的模板裡,可以使用以上模板常量,它們表示不同的字符串,一般在需要引用url時,可以用到以上常量
默認來講:如果我們訪問:
Localost/index.php/home/product/test,這時模板如使用了__PUBLIC__模板常量,那麼它的值指向了apache的htdocs目錄下,但是如果我們有多項目,這時會有沖突,如何解決?
解決之道:
1) 修改配置文件
在配置文件中,可以配置一個叫TMPL_PARSE_STRING選項,它可以定義在模板使用的模板常的值
然後,在模板中,可以這樣來引用當前項目下的資源文件:
2) 配置虛擬主機
打開host文件:
打開httpd.conf
將上面的配置選項之前的#去掉
打開httpd-vhosts.conf文件,添加新的虛擬主機設置
重啟apache
Localhost---àapache/htdocs/
Tp.com-----àapache/htdocs/tp/
6、 獲取內容
$this->fetch();
Display:讀取模板、替換內容、輸出
Fetch:讀取模板、替換內容、返回字符串(主要用於生成靜態頁)
二、模板
1、 模板注釋:
l {/* 注釋內容 */ }
l {// 注釋內容 }
Tp中的模板注釋主要是給模板設計者或程序設計者來看的
2、 變量輸出:
程序向模板中賦值
普通變量
$name
數組變量
$row
對象變量
$obj
代碼示例:
Php程序:
模板程序:
3、 系統變量 (模板中的系統變量)
l $Think.server $_SERVER
l $Think.get $_GET
l $Think.post $_POST
l $Think.request $_REQUEST
l $Think.cookie $_COOKIE
l $Think.session $_SESSION
l $Think.config 讀取配置文件
4、 使用函數
l 格式
{$name|fn1|fn2=arg1,arg2,###}
5、 默認值
{$變量|default="默認值"}
6、 運算符
l + {$a+$b}
l - {$ab}
l * {$a*$b}
l / {$a/$b}
l % {$a%$b}
l ++ {$a++} 或 {++$a}
l -- {$a--} 或 {--$a}
7、 內置標簽
<{$title}>
<標簽>
l 閉合標簽
<br />
l 開放標簽
<div></div>
8、 包含文件
<include file="模板文件名" />
是基於項目的入口文件位置。
./Tpl/Admin/Public/header.html
我們將網頁公共部分放到header.html和footer.html兩個公共模板頁中,在主頁中使用include進行引用
上面在引用文件時,路徑過長,如何解決?
<include file=“模塊名:操作名” title="Think” />
表示引用當前項目下指定模板裡的指定的模板
使用include去包含了”Public模塊”下的footer和header文件
Include標簽允許向模板傳遞參數
模板代碼:
9、 導入文件
在tp中,提供了幾個標簽實現(簡化)對資源文件的引用
<js href="__PUBLIC__/Js/Common.js" />
<css href="__PUBLIC__/Css/common.css" />
<load href="__PUBLIC__/Js/Common.js" />
l 格式:
<importtype=‘type’ file=‘file’ />
file(必須):資源文件
type(可選):資源文件類型,默認為js
起始路徑是網站的Public(__PUBLIC__)目錄
采用命名空間方式
目錄.目錄.文件名
10、 volist標簽
用於遍歷數組元素
l 格式:
<volist name="list" id="vo">
{$vo.id}
{$vo.name}
</volist>
l name(必須):要遍歷的數組變量
l id(必須):當前數組元素
l offset: 要輸出數據的offset
l length: 輸出數據的長度,需要指定offset
l key: 循環索引 key的值默認為 i
11、 foreach標簽
用於遍歷數組變量
語法:
<foreachname="list" item="vo" >
{$vo.id}
{$vo.name}
</foreach>
Name :要遍歷的數組變量
Item:用於保存當前元素的變量名
如果有特殊需求,使用volist,否則使用foreach
12、 for標簽
<forstart="1" end="100">
{$i}
</for>
屬性:
l start(必須):循環變量開始值
l end(必須):循環變量結束值 (不包括)
l name(可選):循環變量名,默認值為i
l step(可選):步進值,默認值為1
13、 switch標簽
l 格式:
<switch name="變量" >
<case value="值1" break="0或1">
輸出內容1
</case>
<case value="值2">輸出內容2</case>
<default />默認情況
</switch>
14、 empty標簽
l <empty name="name">name為空值</empty>
15、 assign標簽
l <assign name="var" value="123" />
16、 if標簽
l if
l elseif
l else
判斷時,需要使用以下連接符
l eq或者 equal:等於
l neq 或者notequal:不等於
l gt:大於
l egt:大於等於
l lt:小於
l elt:小於等於
l heq:恆等於
l nheq:不恆等於
17、 使用php代碼
1)<php>echo “hello”;</php>
2)<?php echo “think”; ?>
在配置文件中,有一個選項可以控制第二種方法是否可用
TMPL_DENY_PHP 可以禁用第二種方法
建議:盡量少在模板中使用php代碼