DEDE使用火車采集器實(shí)現(xiàn)的自動(dòng)實(shí)時(shí)發(fā)布文章和更新HTMl的功能。
一,為什么有這個(gè)想法:
使用火車發(fā)布文章,有三大不足。
需要登陸發(fā)布,受DEDE系統(tǒng)限制太大
就是一次發(fā)布的數(shù)量有限制,可能造成一次性發(fā)布太多遭K的惡果
如果網(wǎng)站首頁(yè)是靜態(tài)文件,則不能更新首頁(yè),用戶就不知道網(wǎng)站的更新情況
如果沒(méi)有一臺(tái)可以一直運(yùn)行的服務(wù)器,使用火車采集器的自動(dòng)更新功能就不太現(xiàn)實(shí)
火車采集器的自動(dòng)更新功能是收費(fèi)的,呵呵。
自己需要咯,想挑戰(zhàn)一下自己咯等。
二,Do it.
首先想到,讓火車發(fā)布大量數(shù)據(jù),且將文章屬性設(shè)置為未審核狀態(tài),這個(gè)問(wèn)題很簡(jiǎn)單,使用DEDEv5.3.1時(shí)卻遇到DEDE的一個(gè)Bug。就是未審核的文章居然會(huì)在前臺(tái)顯示。先是對(duì)DEDE一氣臭罵,后來(lái)找了一些原因,發(fā)現(xiàn)了DEDEv5.3.1中的一個(gè)Bug.經(jīng)修復(fù)后可以實(shí)現(xiàn)未審核的文章不在前臺(tái)顯示。1月13號(hào)到DEDE報(bào)告Bug以后,1月14號(hào)DEDE出的補(bǔ)丁中修復(fù)了這個(gè)問(wèn)題,呵呵,所以,1月15號(hào),就是今天咯,開始正式整理此開發(fā)文檔。
實(shí)際發(fā)現(xiàn),發(fā)布和保存大量未審核文章不成問(wèn)題,難在如何實(shí)現(xiàn)隨機(jī)激發(fā)發(fā)布功能。想了很久,覺(jué)得使用時(shí)間限制最好。當(dāng)前臺(tái)JS調(diào)用了審核文章的鏈接,傳遞一個(gè)訪問(wèn)用戶的信息,程序取得用戶的IP并保存為SESSION信息,此時(shí),審核一篇文章并生成文章與首頁(yè)靜態(tài)文件。一個(gè)用戶在一定的時(shí)間內(nèi),只能激活限定數(shù)量的文章,且,發(fā)布時(shí)使用此用戶的IP信息,呵,挺個(gè)性的。
激活文章,生成文章靜態(tài)頁(yè)和首頁(yè)靜態(tài)文章,受網(wǎng)站模板的影響,可能會(huì)比較慢,則會(huì)出現(xiàn)首頁(yè)未生成完頁(yè)面就被關(guān)閉的問(wèn)題。所以,最好的辦法是,在發(fā)布時(shí)文章時(shí)就生成文章靜態(tài)文件,然后把文章設(shè)置為未審核狀態(tài)。激活文章時(shí)則只需要很短的查詢。首頁(yè)或者列表頁(yè)盡量使用動(dòng)態(tài)頁(yè),這兩個(gè)問(wèn)題不好處理,只能以此法代之。
完整的過(guò)程就是,發(fā)布文檔時(shí),將文檔設(shè)置為未審核狀態(tài);調(diào)用程序時(shí),先判斷上一次查詢的緩存有沒(méi)有超時(shí),如果超過(guò)緩存時(shí)間,則清除緩存,以顯示最新的文章。清除緩存以后,查詢出一定數(shù)量屬性為未審核的文檔,將Archives和Arctiny表中的未審核屬性取消,并更新一下文檔的Pubdate字段,實(shí)現(xiàn)一點(diǎn)隨機(jī)化。最后寫入緩存,禁止緩存有效期內(nèi)的重復(fù)更新!
三,文件使用方法:
發(fā)布文檔時(shí)請(qǐng)把文檔屬性設(shè)置為未審核狀態(tài),即發(fā)布時(shí)提交的文檔屬性參數(shù)為:arcrank=-1,這時(shí)為動(dòng)態(tài)瀏覽;
如果你想生成靜態(tài)文檔,請(qǐng)將文檔狀態(tài)設(shè)置為正常瀏覽狀態(tài),即arcrank=0;然后修改默認(rèn)文檔添加程序。
如:arcticle_add.php,在文件最下邊“//生成HTML”處添加一段代碼:
//生成HTML
InsertTags($tags,$arcID);
$artUrl = MakeArt($arcID,true,true);
if($artUrl=='')
{
$artUrl = $cfg_phpurl."/view.php?aid=$arcID";
}
$dsql->ExecuteNoneQuery("UPDATE `cmsxx_archives` SET `arcrank`='-1' WHERE (`id`='$arcID');");
$dsql->ExecuteNoneQuery("UPDATE `cmsxx_arctiny` SET `arcrank`='-1' WHERE (`id`='$arcID');");
然后,上傳New.php到你的網(wǎng)站根目錄,到Dede后臺(tái)設(shè)置系統(tǒng)基本設(shè)置中,將性能選項(xiàng)卡中的arclist標(biāo)簽調(diào)用緩存時(shí)間設(shè)置為一個(gè)合適的數(shù),如3600表示一個(gè)小時(shí)刷新一次緩存。
最后,在模板文件頂部調(diào)用一段代碼即可:
“ <script type=”text/javascript” src=”{dede:global.cfg_cmsurl/}/new.php”></script> ”。
支持的參數(shù):
no=每次隨機(jī)更新的數(shù)量,為空時(shí)默認(rèn)為5;
typeid=欄目ID,為空則是全站數(shù)據(jù)
order=排序方式,支持Desc:倒序,Asc:順序,Rand:隨機(jī),默認(rèn)為隨機(jī)查詢。
如:“ <script type=”text/javascript” src=”{dede:global.cfg_cmsurl/}/new.php?no=100&typeid=2&order=desc”></script> ”
排序?yàn)镈esc的時(shí)候,是按先發(fā)布的文章先審核的方式進(jìn)行發(fā)布的,Asc反之,Rand為隨機(jī)。
四,這是我們?cè)跀?shù)據(jù)處理方面做的一個(gè)嘗試,也許這種新的模式會(huì)是一次突破。祝大家使用愉快。有Bug或者建議請(qǐng)回復(fù)于后。
你可以任意轉(zhuǎn)摘“DEDE使用火車采集器實(shí)現(xiàn)的自動(dòng)實(shí)時(shí)發(fā)布文章和更新HTMl的功能”,但請(qǐng)保留本文出處和版權(quán)信息。