1. 模板配置
我們繼續之前幾篇文章的代碼設計。這一節主要講如何來使用InitPHP框架的模板。
先看一下配置,配置文件從initphp/initphp.conf.php中的模板配置拷貝到conf/comm.conf.php文件中。模板的配置看如下:
/*********************************View配置*****************************************/ /** * 模板配置 * 1. 可以自定義模板的文件夾,編譯模板路徑,模板文件後綴名稱,編譯模板後綴名稱 * 是否編譯,模板的驅動和模板的主題 * 2. 一般情況下,默認配置是最優的配置方案,你可以不選擇修改模板文件參數 */ $InitPHP_conf['template']['template_path'] = 'web/template'; //模板路徑 $InitPHP_conf['template']['template_c_path'] = 'data/template_c'; //模板編譯路徑 $InitPHP_conf['template']['template_type'] = 'htm'; //模板文件類型 $InitPHP_conf['template']['template_c_type'] = 'tpl.php';//模板編譯文件類型 $InitPHP_conf['template']['template_tag_left'] = '';//模板右標簽 $InitPHP_conf['template']['is_compile'] = true;//模板每次編譯-系統上線後可以關閉此功能 $InitPHP_conf['template']['driver'] = 'simple'; //不同的模板驅動編譯 $InitPHP_conf['template']['theme'] = ''; //模板主題
配置文件中已經有了詳細的注釋,這邊要注意一下幾個配置細節:
is_compile參數。一般情況下,模板都會寫在template_path文件夾下,然後會生成新的編譯文件到template_c_path文件夾下。在調試環境下打開這個參數,上線之後請關閉這個參數,這樣每次請求都不會生成新的文件。
driver 參數。這個參數是模板驅動,默認有兩種,第一種是default 第二種是simple,默認是simple
2. 使用模板
在web/目錄下創建 template文件夾,主要用來存放模板,模板後綴名.htm
在app/目錄下創建data/template_c文件夾,data文件夾主要用來存放生成的模板文件,這個文件需要有可寫777權限。
在template下面創建一個hello.htm的模板文件
然後在indexController中調用模板
; } public function after() { echo after ; } /** * 入口 */ public function run() { $this->view->display(hello); //調用hello.htm模板,後綴名.htm不需要填寫 } /** * get方法 */ public function get() { echo THIS IS GET ; } }
浏覽器中訪問http://127.0.0.1/test/www.initphp.com/ 後可以看到模板調用過,並且模板編譯文件夾下多了一個新的文件hello.tpl.php
3. View API使用
View Api 一共只有5個API接口。接口文檔:http://www.initphp.com/6_4.htm
模板API使用:
//模板會按照順序設置,但是set_tpl函數中的第二個參數F和L分別讓模板最先和最後顯示 $this->view->set_tpl('test'); //設置一個template/test.htm的模板頁面 $this->view->set_tpl('user/userinfo'); //設置template/user/userinfo.htm $this->view->set_tpl('header', 'F'); //設置為頭部,最先顯示 $this->view->set_tpl('footer', 'L'); //最後顯示 $this->view->remove_tpl('test'); //可以移除上面已經設置的test.htm模板 $this->view->get_tpl(); //可以得到已經設置的模板數組 $this->view->display(); //模板顯示
4. default的模板標簽
default模板標簽其實就是最原始的PHP使用方法,簡單暴力好用。
/* 以下是default的模板標簽使用方法(具體使用和PHP中一樣):*/ /* 配置文件修改:*/ $InitPHP_conf['template']['driver'] = 'default'; /* 一個簡單的模板*/ //這個輸出一個變量
5. simple模板標簽
/* 以下是simple的模板標簽使用方法:*/ /* 配置文件修改: */ $InitPHP_conf['template']['driver'] = 'simple'; /* 標簽使用方法: */ /* 普通使用方法:*/ /* if語句使用:*/ /* foreach語句使用:*/ /* for語句使用:*/ /* 輸出變量:*/ /* 輸出常量:*/
1. 自定義標簽
自定義的模板標簽放置在: initphp/core/view/driver/文件夾下,該文件夾下已經有 default.init.php 和 simple.init.php,分別為default和simple兩個模板標簽驅動。文件的名稱為:標簽驅動名稱+'.init.php',例如:simple.init.php類名稱為:標簽驅動名稱+'Init',例如:simpleInit需要定義一個init($str, $left, $right)的公有函數,$str是需要替換的HTML代碼,$left是模板標簽的左標記(默認:'')需要使用自定義模板標簽的時候,別忘記修改配置文件中的:$InitPHP_conf['template']['driver']
具體參看下面的simple模板標簽驅動:
if (!defined('IS_INITPHP')) exit('Access Denied!'); /********************************************************************************* * InitPHP 2.1 國產PHP開發框架 View-simple 簡單模板驅動規則模型 *------------------------------------------------------------------------------- * 版權所有: CopyRight By initphp.com * 您可以自由使用該源碼,但是在使用過程中,請保留作者信息。尊重他人勞動成果就是尊重自己 *------------------------------------------------------------------------------- * $Author:zhuli * $Dtime:2011-10-09 ***********************************************************************************/ class simpleInit { /** * 模板驅動-簡單的驅動 * @param string $str 模板文件數據 * @return string */ public function init($str, $left, $right) { //if操作 $str = preg_replace( /.$left.ifs+(.+?).$right./, , $str ); $str = preg_replace( /.$left.else.$right./, , $str ); $str = preg_replace( /.$left.elseifs+(.+?).$right./, , $str ); //for操作 $str = preg_replace(/.$left.fors+(.+?).$right./,,$str); $str = preg_replace(/.$left./for.$right./,,$str); //foreach操作 $str = preg_replace(/.$left.foreachs+(.+?).$right./,,$str); $str = preg_replace(/.$left./foreach.$right./,,$str); //輸出變量 $str = preg_replace( /.$left.(\$[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*).$right./, , $str ); //常量輸出 $str = preg_replace( /.$left.([A-Z_-ÿ][A-Z0-9_-ÿ]*).$right./s, , $str ); //標簽解析 $str = preg_replace ( /.$left./if.$right./, , $str ); $pattern = array('/'.$left.'/', '/'.$right.'/'); $replacement = array(''); return preg_replace($pattern, $replacement, $str); } }
2. layout布局
模板HTML頁面中使用Layout:。規則:左標簽+'layout:'+'模板名稱(不需要帶.htm,有目錄則user/version,和set_tpl()一樣使用)'+右標簽Layout是為了解決用戶在HTML頁面中來實現模板布局,html中使用了,則會顯示version.htm靜態頁面
/* 模板布局,在所有模板引擎中該方法都通用 */ /* 模板布局主要是為了解決模板切割成多個小模板,模板中能直接調用使用*/ /* 標簽使用:layout:模板名稱(不需要帶模板名稱後綴,例如user.htm模板,則直接user。如果模板有多個文件夾,則test/user 代表test/user.htm模板)*/
3. 模板主題
一般情況下,一個網站會有多個模板主題,InitPHP提供了簡單的模板主題配置方法用戶只需要配置$InitPHP_conf['template']['theme']這個變量,如果是red的主題,則值為'red'模板主題都是放在模板默認的目錄下面的,例如'red'主題,則模板文件夾目錄為: template/red/文件夾下實際上只是在模板默認的文件目錄下再添加了一層目錄,這樣可以方便多主題的應用
4. 編譯機制
InitPHP的模板機制都會將HTML頁面編譯成.php文件,默認為(template_c/編譯文件夾和.tpl.php後綴名稱)$InitPHP_conf['template']['is_compile']是否開啟編譯機制,建議開發的時候開啟,開發完成上線後,關閉該參數