DEDECMS 擴(kuò)展標(biāo)簽和dede自定義標(biāo)簽實(shí)現(xiàn)方法
我們需要知道下擴(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)過(guò)處理后生成的字符串。
$attlist="row|12,titlelen|24";這個(gè)是屬性列表,這個(gè)經(jīng)過(guò)函數(shù)處理后會(huì)直接生成變量并復(fù)制,我們可以測(cè)試下,做如下的修改:
$revalue = 'Hello Word!';
$revalue .="
Row:".$row.";TitleLen:".$titlelen;
這樣我們可以看到,這個(gè)屬性已經(jīng)被創(chuàng)建變量并且賦值了。
接下來(lái)我們可以再進(jìn)一步去修改這個(gè)標(biāo)簽。
比如說(shuō)我們需要寫一個(gè)標(biāo)簽專門來(lái)查詢文章內(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)
接下來(lái)我們就可以編寫查詢語(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è)是用來(lái)獲取標(biāo)簽的底層模板的,$ctp創(chuàng)建用于處理底層模板中的變量,并處理進(jìn)行替換。我們根據(jù)獲取的屬性編寫我們的sql語(yǔ)句,這里我們使用limit 0, $row,這樣就可以根據(jù)$row來(lái)確定查詢的內(nèi)容數(shù)目。
當(dāng)然我們可以獲取更多的屬性以便我們這個(gè)標(biāo)簽更強(qiáng)大,例如我們可以增加類似于arclist中的相關(guān)屬性,并在函數(shù)中進(jìn)行處理,不過(guò)這個(gè)需要有一定的PHP基礎(chǔ)。
接下來(lái)我們通過(guò)執(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();
}
這樣我們就將查詢出來(lái)的結(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;
}
?>
接下來(lái)我們來(lái)測(cè)試我們這個(gè)標(biāo)簽,我們修改article_article.htm模板,在里面加入以下的標(biāo)簽代碼:
{dede:writerarc row='10' titlelen='6'}
[field:title/]
{/dede:writerarc}
相關(guān)文章
織夢(mèng)dedecms安全漏洞include/common.inc.php漏洞解決方法
據(jù)悉DEDECMS的全局變量初始化存在漏洞,可以任意覆蓋任意全局變量,下面是具體的解決方法,需要的朋友可以參考下2021-05-13織夢(mèng)DEDECMS建立模型、簡(jiǎn)單分表、索引優(yōu)化操作方法
最近因?yàn)槭褂玫膁ede系統(tǒng)考慮后期數(shù)據(jù)量大的問(wèn)題,所以提前將dedecms優(yōu)化一下,應(yīng)對(duì)后期數(shù)據(jù)量大導(dǎo)致后臺(tái)卡等問(wèn)題,這里為大家分享一下,主要是思路對(duì)于新版本的dedecms需要2021-05-12DedeCMS大數(shù)據(jù)負(fù)載性能優(yōu)化方案(簡(jiǎn)單幾招讓你提速N倍)
今天我們分享一下DedeCMS數(shù)據(jù)負(fù)載性能優(yōu)化的方法,因?yàn)槟壳?0w條記錄,導(dǎo)致站點(diǎn)后臺(tái)查詢慢,生成HTML也很吃力,經(jīng)過(guò)下面的優(yōu)化確實(shí)可以提升不少2021-05-12mysql織夢(mèng)索引優(yōu)化之MySQL Order By索引優(yōu)化
最近基于mysql數(shù)據(jù)庫(kù)的織夢(mèng)系統(tǒng)查詢與生成靜態(tài)頁(yè)面比較慢,所以想優(yōu)化一下索引試試能不能提高一下執(zhí)行效率下面是具體的實(shí)現(xiàn)步驟,需要的朋友可以參考一下2021-05-12織夢(mèng)dedecms頁(yè)面空白后開啟錯(cuò)誤信息提示功能方便調(diào)試錯(cuò)誤
織夢(mèng)后臺(tái)空白、織夢(mèng)后臺(tái)左側(cè)空白等相關(guān)問(wèn)題,如果沒(méi)有報(bào)錯(cuò)提示信息,不顯示任何內(nèi)容,對(duì)新手來(lái)說(shuō)摸不著頭腦,無(wú)從下手,開啟織夢(mèng)錯(cuò)誤信息提示錯(cuò)誤調(diào)試設(shè)置,讓程序告訴我們2021-05-12
織夢(mèng)DedeCMS 分表實(shí)現(xiàn)一個(gè)欄目對(duì)應(yīng)一個(gè)表(圖)
最近考慮用dedecms做個(gè)大數(shù)據(jù)量的網(wǎng)站,為什么用dedecms呢因?yàn)檫@個(gè)系統(tǒng)特別好用,但負(fù)載是軟肋,很多功能只能自己動(dòng)手實(shí)現(xiàn)了,下面就為大家分享一下具體的方法2021-05-12- 這篇文章主要介紹了加固版織夢(mèng)CMS整站源碼通用安裝教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-17
織夢(mèng)DEDECMS robots優(yōu)化設(shè)置的具體方法
這篇文章主要介紹了織夢(mèng)DEDECMS robots優(yōu)化設(shè)置的具體方法,DEDECMS自帶的robots.txt文件設(shè)置很簡(jiǎn)單,并不能完全滿足網(wǎng)站的優(yōu)化要求,需要的朋友可以參考下本篇方法2020-12-02Dedecms網(wǎng)站Title標(biāo)簽SEO優(yōu)化方法
這篇文章主要介紹了Dedecms網(wǎng)站Title標(biāo)簽SEO優(yōu)化方法,主要涉及到如何實(shí)現(xiàn)"三級(jí)欄目_二級(jí)欄目_一級(jí)欄目_網(wǎng)站名稱"的問(wèn)題,需要的朋友可以參考下小編的方法2020-12-02dedecms文章關(guān)鍵字(自動(dòng)內(nèi)鏈)php5.5以上版本urf-8失效的解決方法
這篇文章主要為大家詳細(xì)介紹了dedecms文章關(guān)鍵字(自動(dòng)內(nèi)鏈)php5.5以上版本urf-8失效的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,有需要的朋友可以收藏2020-11-18


