我們需要知道下擴展標簽的存放目錄及文件名構成,首先,擴展的標簽都是存放在/include/taglib這個目錄,名稱都是以“標簽名.lib.php”格式,例如{dede:channel/}標簽對應的是channel.lib.php文件。
我們可以看一個示例標簽:demotag.lib.php
代碼如下:
if(!defined('dedeinc'))
{
exit(request error!);
}
function lib_demotag(&$ctag,&$refobj)
{
global $dsql,$envs;
//屬性處理
$attlist=row|12,titlelen|24;
fillattsdefault($ctag->cattribute->items,$attlist);
extract($ctag->cattribute->items, extr_skip);
$revalue = '';
//你需編寫的代碼,不能用echo之類語法,把最終返回值傳給$revalue
//------------------------------------------------------
$revalue = 'hello word!';
//------------------------------------------------------
return $revalue;
}
?>
我們登錄系統(tǒng)后臺的[模板]-[全局標簽測試]中運行{dede:demotag/},顯示如下的結果:
,我們會發(fā)現(xiàn)標簽起作用了,輸出了我們的內容。
至此我們完成了標簽的編寫,這里面主要涉及到php、mysql的很多知識,需要有一定相關方面的基礎才能夠編寫標簽了,當然這里只是一個簡單的標簽開發(fā)例子,還有許多的東西可以去開發(fā)。
這里我們知道,其實標簽生成的內容其實是這個函數(shù)的一個返回值,這里返回的內容都是字符串,也就是函數(shù)return $revalue;中的$revalue需要是經過處理后生成的字符串。
$attlist=row|12,titlelen|24;這個是屬性列表,這個經過函數(shù)處理后會直接生成變量并復制,我們可以測試下,做如下的修改:
代碼如下:
$revalue = 'hello word!';
$revalue .=
row:.$row.;titlelen:.$titlelen;
這樣我們可以看到,這個屬性已經被創(chuàng)建變量并且賦值了。
接下來我們可以再進一步去修改這個標簽。
比如說我們需要寫一個標簽專門來查詢文章內容頁的那個相關文章,功能類似于上面sql標簽中的那個sql,只是這里我們將其分裝為一個標簽。
我們可以新建一個標簽,例如叫writerarc,那我們就需要創(chuàng)建一個writerarc.lib.php,然后模仿demotag編寫函數(shù),注意需要修改為
function lib_writerarc(&$ctag,&$refobj)
接下來我們就可以編寫查詢語句及對底層模板處理的相關函數(shù)了
代碼如下:
$revalue = '';
$innertext = $ctag->getinnertext();
$ctp = new dedetagparse();
$ctp->setnamespace('field', '[', ']');
$sql = select * from dede_archives where writer='{$refobj->fields['writer']}' limit 0, $row;
$innertext這個是用來獲取標簽的底層模板的,$ctp創(chuàng)建用于處理底層模板中的變量,并處理進行替換。我們根據(jù)獲取的屬性編寫我們的sql語句,這里我們使用limit 0, $row,這樣就可以根據(jù)$row來確定查詢的內容數(shù)目。
2025國考·省考課程試聽報名