1.系統結構
思途CMS系統手機5.0版在框架kohana3.2基礎上開發,思途根據自身需求對底層代碼進行了一定的改動并集成了思途自己的模板機制,客戶在進行模板開發之前需(xu)要(yao)熟悉kohana框架的基礎(chu)知識,并(bing)了(le)解我(wo)們的模板語法。
2. 基礎控制器和視圖
(1)控制器Stourweb_Controller
該(gai)控(kong)制(zhi)器對部分(fen)網絡參數和配置進行了(le)預(yu)處理(li),并集(ji)成了(le)思(si)途的(de)模板(ban)功能,任何(he)各定義的(de)控(kong)制(zhi)器都需要(yao)繼承自該(gai)類(lei)。
(2) 視圖類Stourweb_View
該類具體實(shi)現(xian)對(dui)模板的(de)解(jie)析(xi),一(yi)般(ban)不需要直接使用,可(ke)以通過(guo)研究該類了解(jie)思途的(de)模板語法。
(3)添加控制器
添(tian)加控(kong)制器(qi)除需要繼(ji)承(cheng)自(zi)Stourweb_Controller外(wai),還需要在/application/route.php的最前面(mian)添(tian)加路徑解(jie)析,防止訪問(wen)該控(kong)制器(qi)時被轉到(dao)目的地首頁。
例如:
Route::set('mycontroller', 'mycontroller'/<param>', array('param' => '[a-zA-Z0-9]+'))
->defaults(array(
'action' => 'index',
'controller' => ‘mycontroller'));
3.模板語法(控制器端)
(1) 模板目錄
默認模板(ban)目錄是default, 即/application/views/default/, 自(zi)定義模板(ban)目錄與default同級,名稱可以隨意,內部結構(gou)和default里(li)的結構(gou)完全一(yi)致,系統會優先調(diao)用自(zi)定義模板(ban)里(li)的模板(ban),如(ru)果(guo)該模板(ban)不存在,則(ze)調(diao)用默認模板(ban)里(li)的同名文件(jian)。
(2) 變量賦值assign
assign($key,$value): 將變(bian)量賦予模板,全局變(bian)量或常量可以(yi)不用
例子: $this->assign(‘lines’, $linelist);
(3) 使用模板 display
display($tpl): 顯(xian)示(shi)模(mo)板(ban), 模(mo)板(ban)后綴名必須是(shi)php, $tpl為模(mo)板(ban)相對路(lu)徑(jing)(不帶文(wen)件后綴),即相對”/application/views/模(mo)板(ban)目錄/”的路(lu)徑(jing)。
例子: $this->display(‘car/show’) 調(diao)用的是”/application/views/模板目(mu)錄/car/show.php”
(4) 參數params
$this->params[$key]: 獲(huo)取url標準參數(shu)。url參數(shu)可以使(shi)用GET的形式(shi)傳(chuan)輸,但(dan)一(yi)般(ban)建議使(shi)用斜線(xian)分割的方式(shi)進(jin)行傳(chuan)輸,也就是/key/value的形式(shi)。
例子:對于地址 www.lvyou.com/phone/line/show/id/5/attrid/6, 其(qi)中phone是(shi)手機版目錄,line是(shi)控制(zhi)器,show是(shi)action, 參數(shu)有id和(he)attrid, 值分別為5,6 , 這時不能(neng)通過超全(quan)局變量$_GET來獲(huo)取(qu)他們的值,而(er)是(shi)用$this->params[‘id’]和(he)$this->params[‘attrid’]來獲(huo)取(qu)
4. 模板語法(視圖篇)
(1) 注釋自動替換:
在模板上的html注釋(shi),模板引擎會自動(dong)替(ti)換為(wei)空.
例如(ru): <!—這是注釋--->在模板解析的時(shi)候會自動(dong)替換為空
(2) 變量和數組
變量可(ke)以直接調用
例如:
{$price} 普通(tong)變(bian)量(liang)
{TYPEID} 常量
{$info[‘line’][‘name’]} 數組
(3) 引用模板
可以采用template ,include或request語法進行(xing)引(yin)(yin)用其(qi)它模板, 其(qi)中template和include直(zhi)接引(yin)(yin)用的模板,而request引(yin)(yin)用的是控制器, 所(suo)有當前的控制器的變量在(zai)request中并不能使用
例如: {template ‘public/header’} 或者 {request ’public/header’}
(4) php單行表達式解析
主要用(yong)于解析單行的php
例如: {php echo date(‘Y-m-d’);}表示輸出當(dang)前時間
(5) 多行php語法解析
采用{php}語法(fa)(fa)體{/php}實現多行php語法(fa)(fa)解析.
例如: {php}
for($i=0;$i<10;$i++)
{
echo $i;
}
{/php}
(6) if else else if 判斷語法
用于邏(luo)輯(ji)判斷
例如(ru):
{if $islogin>0}
<li>用戶名:{$username}</li>
{elseif $islogin ==0}
<li>請登陸</li>
{else}
<li>請(qing)登陸</li>
{/if}
(7) 循環標簽loop,
用于循環數(shu)組(zu), 功能類似foreach, 內置變(bian)量$n表示當前索引,從1開(kai)始。第(di)(di)一個(ge)參數(shu)是(shi)(shi)要循環的數(shu)組(zu),第(di)(di)二個(ge)參數(shu)是(shi)(shi)key或value(假(jia)如沒有第(di)(di)三個(ge)參數(shu),那就是(shi)(shi)value), 第(di)(di)三個(ge)參數(shu)是(shi)(shi)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) 函數解析
可(ke)以直(zhi)接調用(yong)全局(ju)函(han)數:
{func($param1,$param2)}
(9) 靜態函數解析:
{Common::func($param1,$param2))}
(10) CSS、JS調用(yong)
Common::css($files,$minjs = false, $default = true): 引(yin)用css文件
$files是(shi)css文件名或路徑,多個文件,需要使用逗號分割。
$minjs表示是否將(jiang)多(duo)個css文件混(hun)合
$default表(biao)示是(shi)否調用默認的css文件(jian),如果為(wei)false, 表(biao)示直接調用$files的絕對路徑(jing),此(ci)時$files里的文件(jian)必須(xu)是(shi)路徑(jing)形(xing)式,即相(xiang)對于(yu)根目(mu)錄的絕對路徑(jing)。
當(dang)$default為true時,該函數會優先調(diao)用(yong)客(ke)戶(hu)自(zi)定義模板目錄的(de)css, 再調(diao)用(yong)標準的(de)css。
假(jia)設客戶在(zai)/application/views/里新建了一(yi)個模板目錄mytemplate, 并且在(zai)/application/bootstrap.php 里將$cfg_default_template名稱(cheng)指定為/mytemplate/, 那么這個函數會優化(hua)查找(zhao)/public/mytemplate/css目錄的同名文(wen)件,如果(guo)不(bu)存在(zai),則會調用/public/mytemplate里的同名文(wen)件。
例如: {Common::css('amazeui.css,style.css,extend.css')}
Common::js($files,$minjs=false,$default=true} : 使用(yong)方(fang)法同Common::css
(11) 標簽解析:
標簽(qian)的主要作用是可以直接調用數(shu)據(ju)庫數(shu)據(ju)或(huo)其(qi)他數(shu)據(ju),而不需要在(zai)控制器里先assign后才使用。所有標簽(qian)都定義在(zai)/taglib目錄里,思途已經預定義了20多(duo)個常(chang)用的標簽(qian),可以直接使用。
?標簽(qian)就(jiu)(jiu)(jiu)是(shi)一個只(zhi)包(bao)含靜態(tai)函數(shu)(shu)的(de)類,名稱為(wei)Taglib_Xxx, 里(li)面的(de)函數(shu)(shu)就(jiu)(jiu)(jiu)是(shi)讀取數(shu)(shu)據,并(bing)默認將返回(hui)的(de)數(shu)(shu)據賦予$data變(bian)(bian)(bian)量(liang),這樣就(jiu)(jiu)(jiu)可以在該標簽(qian)里(li)直接(jie)像使(shi)(shi)用(yong)(yong)其他常規變(bian)(bian)(bian)量(liang)一樣使(shi)(shi)用(yong)(yong)這個$data變(bian)(bian)(bian)量(liang),如果希望(wang)返回(hui)的(de)變(bian)(bian)(bian)量(liang)名稱不是(shi)$data, 則使(shi)(shi)用(yong)(yong)return參(can)數(shu)(shu)來指定。
標簽的(de)模板函(han)(han)數(shu)為public static func($params)的(de)形(xing)式(shi),即只帶一個參(can)(can)數(shu),$params里(li)包含了(le)除action和(he)return的(de)所有(you)參(can)(can)數(shu),我們根據這些參(can)(can)數(shu)來讀取數(shu)據。 函(han)(han)數(shu)內(nei)部(bu)沒有(you)特殊的(de)規則要(yao)求(qiu),但(dan)一定(ding)要(yao)返(fan)回數(shu)據。標簽里(li)也可以定(ding)義其(qi)他函(han)(han)數(shu)供(gong)內(nei)部(bu)使用。
?
例如:
{st:標(biao)簽名 action=”方法名” row=”參數1” limit=”參數2” return=”data” }
{loop $data $v}
{$v}
{/loop}
{/st}
贊
0
有一點幫助
0
沒有幫助