亚洲精品国产字幕久久vr|色噜噜视频在线观看|久热精品男人的天堂在线视频|久久综合九色综合亚洲小说|欧美日韩一区二区不卡|精品国语对白精品自拍视

Skip to content
快速導航

DedeCMS標簽擴展 ?

定義標簽 ?

在解析式模板引擎中我們需要定義全局標簽,在上面的文檔說(shuō)明中已經(jīng)知道在系統根目錄下 /include/taglib 中進(jìn)行擴展,標簽的文件名應該是:標簽.lib.php ,例如 arclist 所對應的標簽名稱(chēng)則為:arclist.lib.php 。

我們創(chuàng )建一個(gè)測試的標簽 {dede:test name='dedecms'/} ,那就需要創(chuàng )建一個(gè)名為 test.lib.php 的文件。

標簽文件內容結構 ?

標簽內容的文件結構如下,為一個(gè)函數

php
<?php
if(!defined('DEDEINC')) exit("Request Error!");
function lib_test(&$ctag,&$refObj)
{
    global $dsql,$envs;
    //屬性處理
    $attlist="row|12,titlelen|24";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $revalue = '';
    //你需編寫(xiě)的代碼,不能用echo之類(lèi)語(yǔ)法,把最終返回值傳給$revalue
    //------------------------------------------------------
    $revalue = 'Hello Word!';
    //------------------------------------------------------
    return $revalue;
}
?>

這里 function lib_test(&$ctag,&$refObj) 就是我們標簽的擴展函數,所有標簽生成的內容都是由這個(gè)函數解析后獲得的。

屬性處理 ?

函數中 $attlist="row|12,titlelen|24" 為系統默認屬性的參數,例如我們上面 test 標簽需要一個(gè)默認的屬性 name ,并且 name 為空,則需要更改為:

php
$attlist="name|"

這里符號 , 用來(lái)隔開(kāi)各個(gè)屬性,符號 | 用來(lái)分隔變量的名稱(chēng)和值,這里 name| 則代表默認參數 name 為空。

我們在使用參數的時(shí)候,直接使用 $name 就可以在函數中進(jìn)行調用了,例如:

php
function  lib_test(&$ctag,&$refObj)
{
	global  $dsql,$envs;
	//屬性處理
	$attlist="name|";
	FillAttsDefault($ctag->CAttribute->Items,$attlist);
	extract($ctag->CAttribute->Items, EXTR_SKIP);
	$revalue =  '我的名字:'.$name;
	return  $revalue;
}

我們在系統后臺標簽測試器中進(jìn)行測試:

image-20220328220918108

底層模板處理 ?

一般的標簽會(huì )涉及到底層模板,例如:arclist 、channel 等,我們來(lái)擴展下我們上面標簽的功能:

html
{dede:test  name='dedecms'/}
	我的名字叫:[field:name/]
{dede:test}

這里 我的名字叫:[field:name/] 則為我們要處理的底層模板,[field:name/] 為我們標簽屬性中的 name 。

這里我們需要了解 lib_test(&$ctag,&$refObj) 函數中 $ctag 參數,這個(gè)參數就是我們解析式模板引擎獲取的當前標簽內容,其中這個(gè)對象下有一個(gè) GetInnerText() 方法能夠獲取當前標簽的底層模板。

php
<?php
if(!defined('DEDEINC'))  exit("Request Error!");

function  lib_test(&$ctag,&$refObj)
{
	global  $dsql,$envs;
	//屬性處理
	$attlist="name|";
	FillAttsDefault($ctag->CAttribute->Items,$attlist);
	extract($ctag->CAttribute->Items, EXTR_SKIP);
	// 獲取底層模板
	$innertext=  $ctag->GetInnerText();
	// 對標簽進(jìn)行解析
	$revalue =  str_replace("[field:name/]", $name, $innertext);
	return  $revalue;
}
?>

這樣我們就完成了一個(gè)簡(jiǎn)單的對底層模板解析的處理。

image-20220328221858319

標簽其他一些開(kāi)發(fā)技巧可參考 /include/taglib 其他標簽文件。

織夢(mèng)官方 版權所有 | 未經(jīng)授權禁止轉載 | | 云主機支持:藍隊云

亚洲精品国产字幕久久vr|色噜噜视频在线观看|久热精品男人的天堂在线视频|久久综合九色综合亚洲小说|欧美日韩一区二区不卡|精品国语对白精品自拍视