一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

smarty模板目錄結(jié)構(gòu)與路徑問(wèn)題

 sumi2005 2014-01-29

1.背景
最近在開(kāi)發(fā)一套系統(tǒng),采用了smarty模板。根據(jù)不同用戶,要用不同模板,為了方便修改和維護(hù),將每一套模板都放在templates目錄下作為一個(gè)目錄存在,如默認(rèn)模板為templates/default。而且系統(tǒng)規(guī)模較大,后期需要不斷擴(kuò)展功能,所以并沒(méi)有把所有代碼和模板都放在根目錄下,而是分別為不同的功能建立不同的子目錄或?qū)O目錄,如user目錄存放與用戶相關(guān)文件,system目錄存放與系統(tǒng)相關(guān)的文件,templates/default/system/system_info.tpl是系統(tǒng)信息默認(rèn)模板文件。

2.系統(tǒng)目錄結(jié)構(gòu)
大致如下
root
|--includes (系統(tǒng)包含文件)
|--templates (模板文件)
|--default
|--css
|--images
|--user
|--system
|--system_info.tpl
|--blue
|--css
|--images
|--user
|--system
|--system_info.tpl
|--templates_c
|--cache
|--js
|--smarty (smarty所有類文件)
|--user
|--system (與系統(tǒng)相關(guān)的文件)
|--system_info.php

3.問(wèn)題
1).最初在模板文件中使用了絕對(duì)路徑(相對(duì)于站點(diǎn)根的路徑 ).如在system_info.tpl中圖片是這樣顯示的
<img src="/templates/default/images/logo.gif"/>
這樣當(dāng)系統(tǒng)發(fā)布時(shí),必須要把系統(tǒng)目錄作為網(wǎng)站的根目錄圖片才能正確顯示。但客戶的要求是該系統(tǒng)可能只是一個(gè)虛擬目錄或者子目錄。這樣網(wǎng)站必布時(shí)就必須修改圖片路徑為真實(shí)路徑。如果文件很多,這種修改就很麻煩(雖然可以用文件替換功能)。但是如果有N個(gè)客戶,每個(gè)客戶N個(gè)模板...

2).將模板文件修改如下
<img src="{$URL_ROOT}/templates/default/images/logo.gif"/>
$URL_ROOT在一個(gè)全局配置文件中設(shè)置。這樣只要改變$URL_ROOT的值就搞定了,:)。
客戶問(wèn):如果我改變了根目錄的位置,或者換了域名,或者...?我們不希望自己去修改任何配置!

3).模板文件不變
<img src="{$URL_ROOT}/templates/default/images/logo.gif"/>
在每個(gè)目錄下新建一個(gè)url_root.php文件,存放當(dāng)前目錄到根目錄的相對(duì)路徑。
如system/url_root.php如下

<?php
$URL_ROOT = "..";//根目錄在上一層目錄
?>
每次訪問(wèn)目錄下的一個(gè)文件時(shí),require當(dāng)前目錄下的url_root.php取得該文件到根目錄的路徑。然后在smarty中
$tpl->assign("URL_ROOT",$URL_ROOT);就可以了
但是如果有很多文件,每個(gè)都加的話,修改維護(hù)起來(lái)也麻煩。
所以把這個(gè)操作封裝到smarty的子類中,只修改一個(gè)文件就可以了。

includes/MySmarty.php 文件內(nèi)容如下:

<?php 
//定義服務(wù)器中的根目錄的絕對(duì)地址 
define("WEB_ROOT",realpath(dirname(__FILE__)."/..")); 
//加載smarty類文件 
require_once(WEB_ROOT."/smarty/Smarty.class.php"); 
//擴(kuò)展smarty類 
class MySmarty extends Smarty 
{ 
function MySmarty() 
{ 
$this->Smarty(); 
$this->template_dir = WEB_ROOT.'/templates/default/'; 
$this->compile_dir = WEB_ROOT.'/templates_c/'; 
$this->config_dir = WEB_ROOT.'/configs/'; 
$this->cache_dir = WEB_ROOT.'/cache/'; 
$this->caching = false; 
//加載引用當(dāng)前類的文件所在的目錄到根目錄的相對(duì)地址 
require_once("./url_root.php"); 
//為模板路徑賦值 
$this->assign("URL_ROOT",$URL_ROOT); 
$this->assign('app_name', 'OA System'); 
} 
} 
?> 

這樣系統(tǒng)中的任何一個(gè)使用模板的文件不需要修改,就可以直接給URL_ROOT賦值了.

4.總結(jié)
用smarty使用多套模板時(shí),絕對(duì)路徑,相對(duì)路徑,界面可視化是個(gè)令人頭疼的問(wèn)題。
經(jīng)過(guò)多次修改后,個(gè)人感覺(jué)這個(gè)系統(tǒng)比較具有通用性了,用戶可以把整套系統(tǒng)放到網(wǎng)站的根目錄下, 或者作為一個(gè)子目錄,或者使用虛擬目錄,不用修改路徑配置,不用擔(dān)心路徑問(wèn)題。唯一需要注意的是在開(kāi)發(fā)模板時(shí),仍然使用相對(duì)于根的路徑,這樣是為了得到可視化效果,開(kāi)發(fā)完成候,在路徑的最前面加入{$URL_ROOT}即可。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产伦精品一区二区三区精品视频| 国产精品成人一区二区在线| 亚洲伊人久久精品国产| 欧美激情一区=区三区| 欧美人禽色视频免费看 | 色老汉在线视频免费亚欧| 高清国产日韩欧美熟女| 激情三级在线观看视频| 老司机精品在线你懂的| 亚洲最新中文字幕一区| 国产精品伦一区二区三区在线 | 亚洲最新的黄色录像在线| 国产水滴盗摄一区二区| 国产精品久久精品毛片| 国产成人精品99在线观看| 婷婷亚洲综合五月天麻豆| 日韩在线视频精品中文字幕| 91精品蜜臀一区二区三区| 欧美尤物在线观看西比尔| 国产日韩久久精品一区| 又黄又硬又爽又色的视频| 青青操成人免费在线视频| 亚洲熟女少妇精品一区二区三区| 九九视频通过这里有精品| 成人你懂的在线免费视频| 日本不卡一本二本三区| 少妇被粗大进猛进出处故事| 中文字幕人妻av不卡| 国产欧美韩日一区二区三区| 97人妻人人揉人人躁人人| 爱草草在线观看免费视频| 久久精品欧美一区二区三不卡| 丰满人妻一二区二区三区av| 日本在线视频播放91| 久热人妻中文字幕一区二区| 日本女人亚洲国产性高潮视频| 中文字幕在线区中文色| 久久福利视频这里有精品| 日韩性生活片免费观看| 亚洲第一香蕉视频在线| 久久精品蜜桃一区二区av|