在TP框架中,我們一般是在控制器定義變量淫奔,并將變量渲染到視圖里輸出。然而堤结,本次要介紹的是用自定義標(biāo)簽輸出變量唆迁。在進(jìn)行cms開(kāi)發(fā)中,前臺(tái)頁(yè)面的數(shù)據(jù)輸出一般是靠自定義的標(biāo)簽竞穷,進(jìn)行輸出唐责。
TP框架的視圖工作流程:把控制器中定義的變量或者自定義標(biāo)簽的變量,渲染到頁(yè)面模板瘾带;接著鼠哥,TP框架會(huì)編譯視圖頁(yè)面,把生成php文件放在項(xiàng)目下runtime\temp目錄里(TP框架的運(yùn)行文件)看政;最后當(dāng)用戶(hù)訪問(wèn)時(shí)朴恳,調(diào)用運(yùn)行文件里的php文件,顯示到用戶(hù)界面里允蚣。
自定義標(biāo)簽
1 于颖、自定義的標(biāo)簽,一般是放在公共模塊里嚷兔,即在common模塊下新建目錄taglib(用存放自定義標(biāo)簽庫(kù))森渐;
2做入、在taglib目錄下創(chuàng)建Demo.php繼承app\common\taglib的TagLib類(lèi),代碼如下:
<?php
namespace app\common\taglib;
use think\template\TagLib;
class Demo extends TagLib{
/**
* 定義標(biāo)簽列表
*/
protected $tags = [
/**標(biāo)簽定義
* attr:屬性列表
* close:是否閉合(0表示閉合同衣,1表示不閉合竟块。默認(rèn)值為1)
* alias:標(biāo)簽別名
* level:嵌套層次
*/
'sitename' => ['attr' => 'name', 'close' => 0],//閉合標(biāo)簽
'keyword' => ['attr' => 'key', 'close' => 1], //不閉合標(biāo)簽
];
/**
* 閉合標(biāo)簽
* $tag:存放標(biāo)簽屬性的數(shù)組
*/
public function sitename($tag)
{
return '網(wǎng)站名稱(chēng):'.$tag['name'];
}
/**
* 不閉合標(biāo)簽
* $tag:存放標(biāo)簽屬性的數(shù)組
* $content:標(biāo)簽內(nèi)的數(shù)據(jù)
*/
public function keyword($tag,$content)
{
return '網(wǎng)站關(guān)鍵詞:'.$tag['key'].$content;
}
}
如何使用自定義標(biāo)簽
首先,在使用標(biāo)簽前需要配置標(biāo)簽耐齐,不然無(wú)法使用浪秘,在TP 5.1項(xiàng)目中配置自定義的標(biāo)簽。
- 方法一蚪缀、打開(kāi)項(xiàng)目下config\template.php配置文件秫逝,在配置文件中添加如下配置:
'taglib_build_in' => 'cx,app\common\taglib\Demo',
注意:cx是框架默認(rèn)的標(biāo)簽庫(kù),配置的標(biāo)簽庫(kù)必須添加命名空間询枚。這種方法配置的標(biāo)簽庫(kù)违帆,在使用的時(shí)候不用添加標(biāo)簽的命名空間(即標(biāo)簽庫(kù)名)。
例如金蜀,news標(biāo)簽
{news num='10'}{$titile}{/news}
- 方法二刷后、打開(kāi)項(xiàng)目下config\template.php配置文件,在配置文件中添加如下配置:
'taglib_pre_load' => 'app\common\taglib\Demo',
注意:這種方法配置的標(biāo)簽庫(kù)渊抄,在使用的時(shí)候需要添加標(biāo)簽的命名空間(即標(biāo)簽庫(kù)名)尝胆。
其次,可以在模板文件里使用上面定義的標(biāo)簽护桦,如下:
方法一的使用:
{sitename name='新浪微博'/}
{keyword key='新浪,微博'}
我在關(guān)鍵詞后面含衔。
{/keyword}
方法二的使用:
{Demo:sitename name='新浪微博'/}
{Demo:keyword key='新浪,微博'}
我在關(guān)鍵詞后面。
{/Demo:keyword}