《PHP實(shí)例:thinkphp3.x中display方法及show方法的用法實(shí)例》要點(diǎn):
本文介紹了PHP實(shí)例:thinkphp3.x中display方法及show方法的用法實(shí)例,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:thinkphp教程
PHP教程本文實(shí)例講述了thinkphp3.x中display辦法及show辦法的用法.分享給大家供大家參考,具體如下:
PHP教程通過前面的文章在了解了控制器和模型操作后,我們開始熟悉視圖部分,ThinkPHP中的視圖主要就是指模板文件和模板引擎,本篇首先了解下模板文件以及是如何進(jìn)行渲染輸出的.
PHP教程一、模板定義
PHP教程為了對(duì)模板文件更加有效的管理,ThinkPHP對(duì)模板文件進(jìn)行目錄劃分,默認(rèn)的模板文件定義規(guī)則是:
PHP教程模板目錄/[分組名/][模板主題/]模塊名/操作名+模板后綴
PHP教程模板目錄默認(rèn)是項(xiàng)目下面的Tpl, 當(dāng)定義分組的情況下,會(huì)依照分組名分開子目錄,新版模板主題默認(rèn)是空(表示不啟用模板主題功能),
PHP教程模板主題功能是為了多模板切換而設(shè)計(jì)的,如果有多個(gè)模板主題的話,可以用DEFAULT_THEME參數(shù)設(shè)置默認(rèn)的模板主題名.
PHP教程在每個(gè)模板主題下面,是以項(xiàng)目的模塊名為目錄,然后是每個(gè)模塊的具體操作模板文件,例如:
PHP教程User模塊的add操作 對(duì)應(yīng)的模板文件就應(yīng)該是:
PHP教程Tpl/User/add.html
PHP教程模板文件的默認(rèn)后綴是.html,也可以通過TMPL_TEMPLATE_SUFFIX來配置成其他的.例如,我們可以配置:
PHP教程
'TMPL_TEMPLATE_SUFFIX'=>'.tpl'
PHP教程定義后,User模塊的add操作 對(duì)應(yīng)的模板文件就變成是:
PHP教程Tpl/User/add.tpl
PHP教程如果項(xiàng)目啟用了模塊分組功能(假設(shè)User模塊屬于Home分組),那么默認(rèn)對(duì)應(yīng)的模板文件可能變成 :
PHP教程Tpl/Home/User/add.html
PHP教程分組模式下面,如果覺得目錄結(jié)構(gòu)太深,可以通過設(shè)置TMPL_FILE_DEPR參數(shù)來配置簡(jiǎn)化模板的目錄層次,例如設(shè)置:
PHP教程
'TMPL_FILE_DEPR'=>'_'
PHP教程默認(rèn)的模板文件就變成了:
PHP教程Tpl/Home/User_add.html
PHP教程正是因?yàn)橄到y(tǒng)有這樣一種模板文件自動(dòng)識(shí)別的規(guī)則,所以給我們的模板渲染輸出帶來了簡(jiǎn)化.
PHP教程二、模板渲染
PHP教程模板定義后就可以通過display和show辦法來渲染輸出.其中display辦法需要我們有定義模板文件,而show辦法則是直接渲染內(nèi)容輸出.
PHP教程最常用的是display辦法,調(diào)用格式:
PHP教程第一種:
PHP教程display('[主題:][模塊:][操作]'[,'字符編碼'][,'輸出類型'])
PHP教程第二種:
PHP教程display('完整的模板文件名'[,'字符編碼'][,'輸出類型'])
PHP教程下面是一個(gè)最典型的用法,不帶任何參數(shù):
PHP教程
$this->display();
PHP教程表示系統(tǒng)會(huì)依照默認(rèn)規(guī)則自動(dòng)定位模板文件,所以通常display方法無需帶任何參數(shù)即可輸出對(duì)應(yīng)的模板,這是模板輸出的最簡(jiǎn)單的用法.
PHP教程如果沒有依照模板定義規(guī)則來定義模板文件,或者我需要調(diào)用其他模塊下面的某個(gè)模板,可以使用:
PHP教程
$this->display('edit');
PHP教程表示調(diào)用當(dāng)前模塊下面的edit模板
PHP教程
$this->display('Member:read');
PHP教程表示調(diào)用Member模塊下面的read模板.
PHP教程如果我們使用了模板主題功能,那么也可以支持跨主題調(diào)用,使用:
PHP教程
$this->display('theme:User:edit');
PHP教程表示調(diào)用theme主題下面的User模塊的edit模板.
PHP教程這種方式的渲染輸出不需要寫模板文件的路徑和后綴,確切地說,這里面的模塊和操作并不一定需要有對(duì)應(yīng)的模塊或者操作,只是一個(gè)目錄名稱和文件名稱罷了,例如,你的項(xiàng)目里面可能根本沒有Public模塊,更沒有Public模塊的menu操作,但是一樣可以使用
PHP教程
$this->display('Public:menu');
PHP教程輸出這個(gè)模板文件.理解了這個(gè),模板輸出就清晰了.
PHP教程display辦法支持在渲染輸出的時(shí)候指定輸出編碼和類型,例如:
PHP教程
$this->display('read', 'utf-8', 'text/xml');
PHP教程表示輸出XML頁面類型(配合你的應(yīng)用需求可以輸出很多類型).
PHP教程事情總有特例,如果模板目錄是自定義的,或者根本不需要按模塊進(jìn)行分目錄存放,那么默認(rèn)的display渲染規(guī)則就不能處理,這個(gè)時(shí)候,我們就需要使用另外一種方式來應(yīng)對(duì),直接傳入模板文件名即可,例如:
PHP教程
$this->display('./Public/menu.html');
PHP教程這種方式需要指定模板路徑和后綴,這里的Public目錄是位于當(dāng)前項(xiàng)目入口文件位置下面.如果是其他的后綴文件,也支持直接輸出,例如:
PHP教程
$this->display('./Public/menu.tpl');
PHP教程只要./Public/menu.tpl是一個(gè)實(shí)際存在的模板文件.
PHP教程要注意模板文件位置是相對(duì)于項(xiàng)目的入口文件,而不是模板目錄.
PHP教程還有一種情況是,你需要獲取渲染模板的輸出內(nèi)容,就可以使用fetch辦法,fetch辦法的用法和display基本一致,區(qū)別就在于fetch辦法渲染后不是直接輸出,而是返回渲染后的內(nèi)容,例如:
PHP教程
$content = $this->fetch('Member:edit');
PHP教程使用fetch辦法獲取渲染內(nèi)容后,你可以進(jìn)行過濾和替換等操作,用于對(duì)模板輸出的復(fù)雜需求.
PHP教程如果你沒有定義任何模板文件,或者把模板內(nèi)容存儲(chǔ)到數(shù)據(jù)庫中的話,你就需要使用show辦法來渲染輸出了,show辦法的調(diào)用格式:
PHP教程show('渲染內(nèi)容'[,'字符編碼'][,'輸出類型'])
PHP教程例如,
PHP教程
$this->show($content);
PHP教程也可以指定編碼和類型:
PHP教程
$this->show($content, 'utf-8', 'text/xml');
PHP教程show辦法中的內(nèi)容也可以支持模板解析.
PHP教程三、模板賦值
PHP教程我們知道了如何渲染模板輸出,但是如果要在模板中輸出變量,必須在在控制器中把變量傳遞給模板,提供了assign辦法對(duì)模板變量賦值,無論何種變量類型都統(tǒng)一使用assign賦值.
PHP教程
$this->assign('name',$value);
//下面的寫法是等效的:
//$this->name = $value;
PHP教程assign方法必須在display和show方法之前調(diào)用,并且系統(tǒng)只會(huì)輸出設(shè)定的變量,其它變量不會(huì)輸出(系統(tǒng)變量可以通過特殊的標(biāo)簽輸出,可以無需賦值模板變量),一定程度上保證了變量的平安性.
PHP教程賦值后,就可以在模板文件中輸出變量了,如果使用的是內(nèi)置模板的話,就可以這樣輸出:
PHP教程
{$name}
PHP教程如果要同時(shí)輸出多個(gè)模板變量,可以使用下面的方式:
PHP教程
$array['name'] = 'thinkphp';
$array['email'] = 'liu21st@gmail.com';
$array['phone'] = '12335678';
$this->assign($array);
PHP教程這樣,就可以在模板文件中同時(shí)輸出name、email和phone三個(gè)變量.
PHP教程模板變量的輸出根據(jù)不同的模板引擎有不同的辦法,我們?cè)诤竺鏁?huì)專門講解內(nèi)置模板引擎的用法.如果你使用的是PHP本身作為模板引擎的話 ,就可以直接在模板文件里面輸出了:
PHP教程
<?php echo $name.'['.$email.''.$phone.']';?>
PHP教程如果采用內(nèi)置的模板引擎,可以使用:
PHP教程
{$name} [ {$email} {$phone} ]
PHP教程輸出同樣的內(nèi)容.
PHP教程關(guān)于更多的模板標(biāo)簽使用,我們會(huì)在后面模板標(biāo)簽中詳細(xì)講解.
PHP教程四、模板替換
PHP教程在進(jìn)行模板輸出之前,系統(tǒng)還可以對(duì)渲染的模板結(jié)果進(jìn)行一些模板的特殊字符串替換操作,也就是實(shí)現(xiàn)了模板輸出的替換和過濾.這個(gè)機(jī)制可以使得模板文件的定義更加方便,默認(rèn)的替換規(guī)則有:
PHP教程../Public: 會(huì)被替換成當(dāng)前項(xiàng)目的公共模板目錄 通常是 /項(xiàng)目目錄/Tpl/當(dāng)前主題/Public/
PHP教程__TMPL__: 會(huì)替換成項(xiàng)目的模板目錄 通常是 /項(xiàng)目目錄/Tpl/當(dāng)前主題/
PHP教程(注:為了部署平安考慮,../Public和__TMPL__不再建議使用)
PHP教程__PUBLIC__:會(huì)被替換成當(dāng)前網(wǎng)站的公共目錄 通常是 /Public/
PHP教程__ROOT__: 會(huì)替換成當(dāng)前網(wǎng)站的地址(不含域名)
PHP教程__APP__: 會(huì)替換成當(dāng)前項(xiàng)目的URL地址 (不含域名)
PHP教程__GROUP__:會(huì)替換成當(dāng)前分組的URL地址 (不含域名)
PHP教程__URL__: 會(huì)替換成當(dāng)前模塊的URL地址(不含域名)
PHP教程__ACTION__:會(huì)替換成當(dāng)前操作的URL地址 (不含域名)
PHP教程__SELF__: 會(huì)替換成當(dāng)前的頁面URL
PHP教程注意這些特殊的字符串是嚴(yán)格區(qū)別大小寫的,并且這些特殊字符串的替換規(guī)則是可以更改或者增加的,我們只需要在項(xiàng)目配置文件中配置TMPL_PARSE_STRING就可以完成.如果有相同的數(shù)組索引,就會(huì)更改系統(tǒng)的默認(rèn)規(guī)則.例如:
PHP教程
'TMPL_PARSE_STRING' =>array(
'__PUBLIC__' => '/Common', // 更改默認(rèn)的/Public 替換規(guī)則
'__JS__' => '/Public/JS/', // 增加新的JS類庫路徑替換規(guī)則
'/Uploads' => '/Uploads', // 增加新的上傳路徑替換規(guī)則
)
PHP教程有了模板替換規(guī)則后,頁面上所有的__PUBLIC__ 字符串都會(huì)被替換,那如果確實(shí)需要輸出__PUBLIC__ 字符串到模板呢,我們可以通過增加替換規(guī)則的方式,例如:
PHP教程
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // 采用新規(guī)則輸出/Public字符串
)
PHP教程這樣增加替換規(guī)則后,如果我們要輸出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替換字符串的輸出方式類似.
PHP教程五、總結(jié)
PHP教程通過本篇的學(xué)習(xí),我們大概掌握了如何定義模板文件和進(jìn)行模板渲染輸出,以及如何賦值模板變量,后面我們將會(huì)學(xué)習(xí)如安在模板文件中使用標(biāo)簽來簡(jiǎn)化你的書寫.
PHP教程PS:這里推薦幾款本站的格式化美化工具,相信大家在以后的開發(fā)中能夠用得上:
PHP教程php代碼在線格式化美化工具:
ode/phpformat
PHP教程JavaScript代碼美化/壓縮/格式化/加密工具:
ode/jscompress
PHP教程在線XML格式化/壓縮工具:
ode/xmlformat
PHP教程JSON代碼格式化美化工具:
ode/json
PHP教程在線XML/JSON互相轉(zhuǎn)換工具:
ode/xmljson
PHP教程sql代碼在線格式化美化工具:
ode/sqlcodeformat
PHP教程更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《ThinkPHP常用辦法總結(jié)》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》.
PHP教程希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所贊助.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/6581.html