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