花魁直播高品质美女在线视频互动社区 - 花魁直播官方版

 歡迎來到素材無憂網(wǎng),按 + 收藏我們
登錄 注冊(cè) 退出 找回密碼

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解

時(shí)間: 2019-05-13 10:31 閱讀: 作者:素材無憂網(wǎng)

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖1)

DEDECMS是最優(yōu)秀的中文開源CMS系統(tǒng)之一了,不過,DEDE系統(tǒng)也不是盡善盡美的,存在許多待改善的地方,且不說它那基本廣受詬病的安全問題,今天跟版網(wǎng)就找其中一個(gè)細(xì)節(jié)說說它的問題,那就是它的tag標(biāo)簽問題。
     DEDECMS中的tag功能設(shè)計(jì)得不合理,正確的方式是:如果一篇文章被加了A,B,C三個(gè)標(biāo)簽,程序應(yīng)該按照從A到C的順序,順次去匹配標(biāo)簽,所以我們可以把與文章與貼近的長(zhǎng)尾詞標(biāo)簽放在A位置,把一些熱詞放在C位置,這樣文章既可以匹配出非常貼近的相關(guān)文章,而且整個(gè)相關(guān)文章數(shù)也能夠用足。
    而DEDECMS源代碼中的匹配原則是這樣的:如果你添加了A,B,C三個(gè)標(biāo)簽,在保存標(biāo)簽的時(shí)候會(huì)將按照第一次A,B,C的順序保存下來,并按照id排序輸出:但是以后修改只是修改了標(biāo)簽的內(nèi)容就不能修改標(biāo)簽的順序了。也就是說如果首先添加了A,C(圖1-1),在想添加B按照A,B,C(圖1-2)的順序修改的時(shí)候,原先的A,C標(biāo)簽已存在id小于后添加的標(biāo)簽id,就會(huì)無法按照A,B,C的順序保存,而是按照A,C,B進(jìn)行排序,不能達(dá)到預(yù)期的效果。
 
一般來說,熱詞會(huì)比較早地進(jìn)入數(shù)據(jù)庫(kù),所以想插入或者添加新的熱詞保存標(biāo)簽的時(shí)候就會(huì)按照最早的順序進(jìn)行保存,調(diào)取相關(guān)文章的時(shí)候就不能調(diào)取出與輸入順序相似的結(jié)果。
 
Dedecms tag問題的程序修改說明:
(1)、當(dāng)前程序的實(shí)現(xiàn)原理
Dedecms操作標(biāo)簽的文件是/include/helpers目錄下archive.helper.php,保存標(biāo)簽的函數(shù)是在文件下方的InsertOneTag函數(shù),主要保存文章對(duì)應(yīng)標(biāo)簽的過程如圖:

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖2)

通過上圖可以看出代碼中沒有對(duì)于文章對(duì)應(yīng)表(dede_taglist)標(biāo)簽排序的設(shè)置,然后在文件中GetTags($aid)讀取文章對(duì)應(yīng)標(biāo)簽的時(shí)候沒有對(duì)讀取排序進(jìn)行操作,默認(rèn)為按照tid的順序讀取,如下圖:

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖3)

輸出的結(jié)果和上文所敘述的結(jié)果相同,這個(gè)tid即等于根據(jù)進(jìn)入標(biāo)簽數(shù)據(jù)表的順序,所以標(biāo)簽的tid會(huì)比較大。
(2)、建立一個(gè)表存儲(chǔ)某篇文章標(biāo)簽順序
      如果要讓文章標(biāo)簽按照用戶輸入的順序進(jìn)行保存,就必須記錄用戶輸入保存標(biāo)簽是的順序所以我們要修改文章標(biāo)簽表dede_taglist。在表中添加一個(gè)字段作為記錄用戶輸入是排序的字段,修改表的方式如下:
  ALTER TABLE `dede_taglist` ADD `order` INT( 3 ) NOT NULL COMMENT '序號(hào)' AFTER `tag`
將sql語(yǔ)句復(fù)制,用管理員用戶登錄dede后臺(tái)左側(cè)樹欄“系統(tǒng)”->"sql命令行工具" 粘貼在文本框中,點(diǎn)擊“確定”(sql語(yǔ)句中的“dede_taglist”的表前綴根據(jù)你的數(shù)據(jù)庫(kù)中設(shè)置的表前綴)。
(3)、修改匹配標(biāo)簽的函數(shù)
然后修改操作文章標(biāo)簽的方法,首先修改添加標(biāo)簽的函數(shù)。在原函數(shù)中添加了一個(gè)參數(shù)作為序號(hào)的記錄function InsertOneTag ($tag, $aid,$i),$i是添加時(shí)的序號(hào)該函數(shù)主要修改了文章標(biāo)簽添加的部分,加入對(duì)`order`排序信息的添加。修改后如圖:

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖4)

然后修改InsertOneTag相關(guān)的函數(shù)InsertTags
DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖5)

這樣在添加標(biāo)簽的時(shí)候就會(huì)記錄用戶輸入標(biāo)簽是的排列順序,然后修改獲取標(biāo)簽的數(shù)序函數(shù)GetTags($id)中的獲取標(biāo)簽的屬性按照`order`的順序讀取,修改后的代碼如下圖:

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖6)

以上修改的是標(biāo)簽添加到讀取的過程,還要修改編輯標(biāo)簽的方式,編輯標(biāo)簽的函數(shù)也是在同文件中,UpIndexKey($id, $arcrank, $typeid, $sortrank=0, $tags='')函數(shù),該函數(shù)分為兩次循環(huán)進(jìn)行對(duì)標(biāo)簽的操作,第一次循環(huán),判斷用戶修改的標(biāo)簽時(shí)候以存在,不存在的話進(jìn)行添加。第二次循環(huán),判斷已存在的標(biāo)簽是否和用戶輸入的標(biāo)簽相同,如果已存在的標(biāo)簽中有但是用戶輸入的標(biāo)簽中沒有,將該標(biāo)簽刪除,如果都存在那么根據(jù)用戶輸入的標(biāo)簽順序重新排序。代碼如下:

DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖7)
DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解(圖8)

這個(gè)函數(shù)修改后,用戶在編輯標(biāo)簽并保存以后,系統(tǒng)就按照用戶標(biāo)記的順序進(jìn)行輸出了。
 
跟版網(wǎng)的程序員已經(jīng)通過修改源代碼修改了這個(gè)問題,如果需要相應(yīng)源代碼的朋友,可以點(diǎn)擊鏈接下載

版權(quán)聲明: 本站資源均來自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!

轉(zhuǎn)載請(qǐng)注明: DedeCMS的TAG標(biāo)簽SEO問題改進(jìn)及PHP源代碼講解

相關(guān)文章
模板推薦