DEDE的擴展標簽
我們需要知道下擴展標簽的存放目錄及文件名構成,首先,擴展的標簽都是存放在/include/taglib這個(gè)目錄,名稱(chēng)都是以“標簽名.lib.php”格式,例如{dede:channel/}標簽對應的是channel.lib.php文件。
我們可以看一個(gè)示例標簽: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 = '';
//你需編寫(xiě)的代碼,不能用echo之類(lèi)語(yǔ)法,把最終返回值傳給$revalue
//------------------------------------------------------
$revalue = 'Hello Word!';
//------------------------------------------------------
return $revalue;
}
?>
我們登錄系統后臺的[模板]-[全局標簽測試]中運行{dede:demotag/},顯示如下的結果:
,我們會(huì )發(fā)現標簽起作用了,輸出了我們的內容。
至此我們完成了標簽的編寫(xiě),這里面主要涉及到PHP、MySQL的很多知識,需要有一定相關(guān)方面的基礎才能夠編寫(xiě)標簽了,當然這里只是一個(gè)簡(jiǎn)單的標簽開(kāi)發(fā)例子,還有許多的東西可以去開(kāi)發(fā)。
這里我們知道,其實(shí)標簽生成的內容其實(shí)是這個(gè)函數的一個(gè)返回值,這里返回的內容都是字符串,也就是函數return $revalue;中的$revalue需要是經(jīng)過(guò)處理后生成的字符串。
$attlist="row|12,titlelen|24";這個(gè)是屬性列表,這個(gè)經(jīng)過(guò)函數處理后會(huì )直接生成變量并復制,我們可以測試下,做如下的修改:
$revalue = 'Hello Word!';
$revalue .="
Row:".$row.";TitleLen:".$titlelen;
這樣我們可以看到,這個(gè)屬性已經(jīng)被創(chuàng )建變量并且賦值了。
接下來(lái)我們可以再進(jìn)一步去修改這個(gè)標簽。
比如說(shuō)我們需要寫(xiě)一個(gè)標簽專(zhuān)門(mén)來(lái)查詢(xún)文章內容頁(yè)的那個(gè)相關(guān)文章,功能類(lèi)似于上面sql標簽中的那個(gè)sql,只是這里我們將其分裝為一個(gè)標簽。
我們可以新建一個(gè)標簽,例如叫writerarc,那我們就需要創(chuàng )建一個(gè)writerarc.lib.php,然后模仿demotag編寫(xiě)函數,注意需要修改為
function lib_writerarc(&$ctag,&$refObj)
接下來(lái)我們就可以編寫(xiě)查詢(xún)語(yǔ)句及對底層模板處理的相關(guān)函數了
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$innertext這個(gè)是用來(lái)獲取標簽的底層模板的,$ctp創(chuàng )建用于處理底層模板中的變量,并處理進(jìn)行替換。我們根據獲取的屬性編寫(xiě)我們的sql語(yǔ)句,這里我們使用limit 0, $row,這樣就可以根據$row來(lái)確定查詢(xún)的內容數目。
當然我們可以獲取更多的屬性以便我們這個(gè)標簽更強大,例如我們可以增加類(lèi)似于arclist中的相關(guān)屬性,并在函數中進(jìn)行處理,不過(guò)這個(gè)需要有一定的PHP基礎。
接下來(lái)我們通過(guò)執行查詢(xún)對sql及輸出變量進(jìn)行處理:
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//根據屬性處理查詢(xún)變量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//獲取底層模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//根據底層模板及查詢(xún)變量得到處理結果
$revalue .= $ctp->GetResult();
}
這樣我們就將查詢(xún)出來(lái)的結果同底層模板中出現的相關(guān)變量進(jìn)行替換,然后生成輸出字符串,將所有的字符串信息存儲到$revalue中。
最后返回這個(gè)值return $revalue;
整個(gè)文件內容如下:
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_writerarc(&$ctag,&$refObj)
{
global $dsql,$envs;
//屬性處理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse();
$ctp->SetNameSpace('field', '[', ']');
$sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row";
$dsql->Execute('me',$sql);
while($rs = $dsql->GetArray('me'))
{
//根據屬性處理查詢(xún)變量
$rs['title'] = cn_substr($rs['title'], $titlelen);
//獲取底層模板
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
//根據底層模板及查詢(xún)變量得到處理結果
$revalue .= $ctp->GetResult();
}
return $revalue;
}
?>
接下來(lái)我們來(lái)測試我們這個(gè)標簽,我們修改article_article.htm模板,在里面加入以下的標簽代碼:
{dede:writerarc row='10' titlelen='6'}
[field:title/]
{/dede:writerarc}
至此我們完成了標簽的編寫(xiě),這里面主要涉及到PHP、MySQL的很多知識,需要有一定相關(guān)方面的基礎才能夠編寫(xiě)標簽了,當然這里只是一個(gè)簡(jiǎn)單的標簽開(kāi)發(fā)例子,還有許多的東西可以去開(kāi)發(fā)。
西安劍鋒網(wǎng)站制作,你的網(wǎng)站一站式服務(wù)專(zhuān)家!
相關(guān)文章:
-
從事網(wǎng)站優(yōu)化的工作人員都知道,網(wǎng)站排名在百度優(yōu)化中的變化比較大,也不穩定。那么,為什么會(huì )出現這種現象呢?其實(shí),搜索引擎的不同,算法也不同,重點(diǎn)也不一樣,比如百度更加重視...
-
將代碼放到模板中。 {php print_r(get_defined_vars());} 要查看這個(gè)地址的模版。http://www.wuzhicms.com/item-34-2-1.html 首先,我們的這個(gè)地址需要是動(dòng)態(tài)的。而不是生成的靜態(tài)地址。 打開(kāi)文件: /www/configs...
-
作為一名站長(cháng)如果不知道友情鏈接對于網(wǎng)站的重要性,那有點(diǎn)說(shuō)不過(guò)去。因為友情鏈接,只要運用好,能夠提高網(wǎng)站在搜索引擎上的排名、能夠提升網(wǎng)站的收錄還是就是友情鏈接是網(wǎng)站...
-
網(wǎng)絡(luò )技術(shù)日益發(fā)達,互聯(lián)網(wǎng)+活動(dòng)進(jìn)行得如火如荼。如果網(wǎng)站依舊沒(méi)有革新,那么在信息時(shí)代就難以生存下去。網(wǎng)站優(yōu)化是大勢所趨。結合現代的網(wǎng)絡(luò )發(fā)展特征,網(wǎng)站可以從以下幾個(gè)方面...
-
一、避免友鏈牽連賞罰。 友情鏈接作為較高質(zhì)量外鏈的一種,在傳遞權重上的能力決然是要高于其他鏈接的。因為年夜部門(mén)友鏈交流城市選用鏈接錨文本的形式,所以對方針關(guān)頭詞排名...
-
網(wǎng)站建設對于一個(gè)企業(yè)網(wǎng)站成功來(lái)說(shuō)尤其重要,有許多地方都是值得我們要用心把握的,那么企業(yè)網(wǎng)站建設到底有哪些地方需要我們注意的呢?小編就為大家來(lái)介紹以下幾點(diǎn)。 西安做網(wǎng)...
-
1、長(cháng)尾關(guān)鍵為非網(wǎng)站的目標關(guān)鍵詞,但是卻能為網(wǎng)站帶來(lái)搜索量。長(cháng)尾關(guān)鍵詞比之目標關(guān)鍵詞具有明顯的特征,關(guān)鍵詞比較長(cháng),往往由兩個(gè)詞語(yǔ)或者三個(gè)詞語(yǔ)組成,甚至是一句短語(yǔ)。這...
-
長(cháng)尾關(guān)鍵詞對優(yōu)化網(wǎng)站排名的作用? 所謂長(cháng)尾關(guān)鍵詞是指那些搜索量少且不穩定但卻能給網(wǎng)站帶來(lái)流量的詞。從某種水平上講,只需一個(gè)詞有可能會(huì )被搜,那就能夠稱(chēng)之為長(cháng)尾詞。長(cháng)尾...
-
網(wǎng)絡(luò )的飛速發(fā)展,也讓大家都開(kāi)始意識到網(wǎng)站建設他們的重要性了,現在在互聯(lián)網(wǎng)市場(chǎng)里面的網(wǎng)站建設公司有非常多,所以企業(yè)以及公司在選擇這些網(wǎng)站建設公司的時(shí)候同樣也有了非常...
-
對于網(wǎng)站建設來(lái)說(shuō),網(wǎng)站上線(xiàn)前誰(shuí)都不能保證網(wǎng)站的穩定性和問(wèn)題的存在,所以網(wǎng)站上線(xiàn)前的籌備工作非常之重要。只要準備好,保證幫你省去很多不必要的麻煩。下面看一下都有哪些...
- 上一篇:沒(méi)有了
- 下一篇:沒(méi)有了