校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 網(wǎng)站建設(shè) > 建站知識(shí) > DedeCMS的TAG標(biāo)簽SEO問(wèn)題改進(jìn)及PHP源代碼講解

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

POST TIME:2017-11-12 23:43



DEDECMS是最優(yōu)秀的中文開(kāi)源CMS系統(tǒng)之一了,不過(guò),DEDE系統(tǒng)也不是盡善盡美的,存在許多待改善的地方,且不說(shuō)它那基本廣受詬病的安全問(wèn)題,今天跟版網(wǎng)就找其中一個(gè)細(xì)節(jié)說(shuō)說(shuō)它的問(wèn)題,那就是它的tag標(biāo)簽問(wèn)題。
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的順序保存下來(lái),并按照id排序輸出:但是以后修改只是修改了標(biāo)簽的內(nèi)容就不能修改標(biāo)簽的順序了。也就是說(shuō)如果首先添加了A,C(圖1-1),在想添加B按照A,B,C(圖1-2)的順序修改的時(shí)候,原先的A,C標(biāo)簽已存在id小于后添加的標(biāo)簽id,就會(huì)無(wú)法按照A,B,C的順序保存,而是按照A,C,B進(jìn)行排序,不能達(dá)到預(yù)期的效果。

一般來(lái)說(shuō),熱詞會(huì)比較早地進(jìn)入數(shù)據(jù)庫(kù),所以想插入或者添加新的熱詞保存標(biāo)簽的時(shí)候就會(huì)按照最早的順序進(jìn)行保存,調(diào)取相關(guān)文章的時(shí)候就不能調(diào)取出與輸入順序相似的結(jié)果。

Dedecms tag問(wèn)題的程序修改說(shuō)明:
(1)、當(dāng)前程序的實(shí)現(xiàn)原理
Dedecms操作標(biāo)簽的文件是/include/helpers目錄下archive.helper.php,保存標(biāo)簽的函數(shù)是在文件下方的InsertOneTag函數(shù),主要保存文章對(duì)應(yīng)標(biāo)簽的過(guò)程如圖:



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



輸出的結(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è)樹(shù)欄“系統(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`排序信息的添加。修改后如圖:



然后修改InsertOneTag相關(guān)的函數(shù)InsertTags


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



以上修改的是標(biāo)簽添加到讀取的過(guò)程,還要修改編輯標(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)簽中沒(méi)有,將該標(biāo)簽刪除,如果都存在那么根據(jù)用戶輸入的標(biāo)簽順序重新排序。代碼如下:




這個(gè)函數(shù)修改后,用戶在編輯標(biāo)簽并保存以后,系統(tǒng)就按照用戶標(biāo)記的順序進(jìn)行輸出了。

跟版網(wǎng)的程序員已經(jīng)通過(guò)修改源代碼修改了這個(gè)問(wèn)題,如果需要相應(yīng)源代碼的朋友,可以點(diǎn)擊鏈接下載


上一篇:織夢(mèng)arclist標(biāo)簽無(wú)法調(diào)用副欄目文章的解決辦法

下一篇:織夢(mèng)后臺(tái)文檔發(fā)布和對(duì)已發(fā)布文檔修改空白的解

收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
主站蜘蛛池模板: 石城县| 阿拉善盟| 贵阳市| 如皋市| 夏津县| 南城县| 扎鲁特旗| 白河县| 大兴区| 崇文区| 许昌市| 岱山县| 扶沟县| 乐至县| 延津县| 南川市| 鄂州市| 阿克苏市| 日喀则市| 永兴县| 延寿县| 德钦县| 侯马市| 盱眙县| 雅安市| 巴东县| 西华县| 休宁县| 措勤县| 沙田区| 涟水县| 黎平县| 伊川县| 滦平县| 绥滨县| 义乌市| 罗江县| 牡丹江市| 和政县| 大新县| 丽水市|