1.系統(tǒng)結(jié)構(gòu)
思途CMS系統(tǒng)手機5.0版在框架kohana3.2基礎(chǔ)上開發(fā),思途根據(jù)自身需求對底層代碼進行了一定的改動并集成了思途自己的模板機制,客戶在進行模板開發(fā)之前需要熟悉kohana框架的基礎(chǔ)知識,并了解我們的模板語法。
2. 基礎(chǔ)控制器和視圖
(1)控制器Stourweb_Controller
該控制器對部分網(wǎng)絡(luò)參數(shù)和配置進行了預處理,并集成了思途的模板功能,任何各定義的控制器都需要繼承自該類。
(2) 視圖類Stourweb_View
該類具體實現(xiàn)對模板的解析,一般不需要直接使用,可以通過研究該類了解思途的模板語法。
(3)添加控制器
添加控制器除需要繼承自Stourweb_Controller外,還需要在/application/route.php的最前面添加路徑解析,防止訪問該控制器時被轉(zhuǎn)到目的地首頁。
例如:
Route::set('mycontroller', 'mycontroller'/<param>', array('param' => '[a-zA-Z0-9]+'))
->defaults(array(
'action' => 'index',
'controller' => ‘mycontroller'));
3.模板語法(控制器端)
(1) 模板目錄
默認模板目錄是default, 即/application/views/default/, 自定義模板目錄與default同級,名稱可以隨意,內(nèi)部結(jié)構(gòu)和default里的結(jié)構(gòu)完全一致,系統(tǒng)會優(yōu)先調(diào)用自定義模板里的模板,如果該模板不存在,則調(diào)用默認模板里的同名文件。
(2) 變量賦值assign
assign($key,$value): 將變量賦予模板,全局變量或常量可以不用
例子: $this->assign(‘lines’, $linelist);
(3) 使用模板 display
display($tpl): 顯示模板, 模板后綴名必須是php, $tpl為模板相對路徑(不帶文件后綴),即相對”/application/views/模板目錄/”的路徑。
例子: $this->display(‘car/show’) 調(diào)用的是”/application/views/模板目錄/car/show.php”
(4) 參數(shù)params
$this->params[$key]: 獲取url標準參數(shù)。url參數(shù)可以使用GET的形式傳輸,但一般建議使用斜線分割的方式進行傳輸,也就是/key/value的形式。
例子:對于地址 www.lvyou.com/phone/line/show/id/5/attrid/6, 其中phone是手機版目錄,line是控制器,show是action, 參數(shù)有id和attrid, 值分別為5,6 , 這時不能通過超全局變量$_GET來獲取他們的值,而是用$this->params[‘id’]和$this->params[‘a(chǎn)ttrid’]來獲取
4. 模板語法(視圖篇)
(1) 注釋自動替換:
在模板上的html注釋,模板引擎會自動替換為空.
例如: <!—這是注釋--->在模板解析的時候會自動替換為空
(2) 變量和數(shù)組
變量可以直接調(diào)用
例如:
{$price} 普通變量
{TYPEID} 常量
{$info[‘line’][‘name’]} 數(shù)組
(3) 引用模板
可以采用template ,include或request語法進行引用其它模板, 其中template和include直接引用的模板,而request引用的是控制器, 所有當前的控制器的變量在request中并不能使用
例如: {template ‘public/header’} 或者 {request ’public/header’}
(4) php單行表達式解析
主要用于解析單行的php
例如: {php echo date(‘Y-m-d’);}表示輸出當前時間
(5) 多行php語法解析
采用{php}語法體{/php}實現(xiàn)多行php語法解析.
例如: {php}
for($i=0;$i<10;$i++)
{
echo $i;
}
{/php}
(6) if else else if 判斷語法
用于邏輯判斷
例如:
{if $islogin>0}
<li>用戶名:{$username}</li>
{elseif $islogin ==0}
<li>請登陸</li>
{else}
<li>請登陸</li>
{/if}
(7) 循環(huán)標簽loop,
用于循環(huán)數(shù)組, 功能類似foreach, 內(nèi)置變量$n表示當前索引,從1開始。第一個參數(shù)是要循環(huán)的數(shù)組,第二個參數(shù)是key或value(假如沒有第三個參數(shù),那就是value), 第三個參數(shù)是value ;
例如:
用法1:
{loop $data $v}
<li {if $n==2}class='on'{/if}>
姓名:{$v}
</li>
{/loop}
用法2:
{loop $data $k $v}
<li {if $n==2}class='on'{/if}>
index:{$k} 姓名:{$v}
</li>
{/loop}
(8) 函數(shù)解析
可以直接調(diào)用全局函數(shù):
{func($param1,$param2)}
(9) 靜態(tài)函數(shù)解析:
{Common::func($param1,$param2))}
(10) CSS、JS調(diào)用
Common::css($files,$minjs = false, $default = true): 引用css文件
$files是css文件名或路徑,多個文件,需要使用逗號分割。
$minjs表示是否將多個css文件混合
$default表示是否調(diào)用默認的css文件,如果為false, 表示直接調(diào)用$files的絕對路徑,此時$files里的文件必須是路徑形式,即相對于根目錄的絕對路徑。
當$default為true時,該函數(shù)會優(yōu)先調(diào)用客戶自定義模板目錄的css, 再調(diào)用標準的css。
假設(shè)客戶在/application/views/里新建了一個模板目錄mytemplate, 并且在/application/bootstrap.php 里將$cfg_default_template名稱指定為/mytemplate/, 那么這個函數(shù)會優(yōu)化查找/public/mytemplate/css目錄的同名文件,如果不存在,則會調(diào)用/public/mytemplate里的同名文件。
例如: {Common::css('amazeui.css,style.css,extend.css')}
Common::js($files,$minjs=false,$default=true} : 使用方法同Common::css
(11) 標簽解析:
標簽的主要作用是可以直接調(diào)用數(shù)據(jù)庫數(shù)據(jù)或其他數(shù)據(jù),而不需要在控制器里先assign后才使用。所有標簽都定義在/taglib目錄里,思途已經(jīng)預定義了20多個常用的標簽,可以直接使用。
?標簽就是一個只包含靜態(tài)函數(shù)的類,名稱為Taglib_Xxx, 里面的函數(shù)就是讀取數(shù)據(jù),并默認將返回的數(shù)據(jù)賦予$data變量,這樣就可以在該標簽里直接像使用其他常規(guī)變量一樣使用這個$data變量,如果希望返回的變量名稱不是$data, 則使用return參數(shù)來指定。
標簽的模板函數(shù)為public static func($params)的形式,即只帶一個參數(shù),$params里包含了除action和return的所有參數(shù),我們根據(jù)這些參數(shù)來讀取數(shù)據(jù)。 函數(shù)內(nèi)部沒有特殊的規(guī)則要求,但一定要返回數(shù)據(jù)。標簽里也可以定義其他函數(shù)供內(nèi)部使用。
?
例如:
{st:標簽名 action=”方法名” row=”參數(shù)1” limit=”參數(shù)2” return=”data” }
{loop $data $v}
{$v}
{/loop}
{/st}
贊
0
有一點幫助
0
沒有幫助
參與評論