DEDE的“關(guān)鍵詞”是個(gè)多處使用、容易混淆的概念,起碼我知道的常用在這幾處:
1、文章中作為SEO關(guān)聯(lián)詞來(lái)替換鏈接的,叫關(guān)鍵詞,代碼是keyword。需要在后臺(tái)手工添加關(guān)鍵詞和相應(yīng)鏈接,生成文章時(shí)把這些詞自動(dòng)替換為錨文本,可指定替換次數(shù)。
2、文章中關(guān)聯(lián)其它文章的詞,也叫關(guān)鍵詞,代碼有兩個(gè),是keywords和tags。
3、用來(lái)搜索的詞,叫關(guān)鍵詞,代碼還沒(méi)去查。
我主要講講與文章有關(guān)的關(guān)鍵詞,keywords和tags。
在DEDE的發(fā)布文章中,填寫(xiě)的是tags,然后寫(xiě)入tag相關(guān)的兩個(gè)表,一個(gè)是tag表名,一個(gè)是文章列表。但tags與文章主表不相關(guān),所以平時(shí)調(diào)用文章內(nèi)容時(shí),都是無(wú)法調(diào)用tags的。
調(diào)用文章時(shí)調(diào)的是keywords,這個(gè)是文章主表dede_archives中有字段。但keywords又不是獨(dú)立存在的,是依附于tags。如果發(fā)文章時(shí)填寫(xiě)了tags,則keywords自動(dòng)變成一樣,相當(dāng)于把tags復(fù)制一份。在調(diào)用文章、處理自由列表時(shí),都是用的keywords而不是tags,就是因?yàn)閗eywords可以直接從主表中讀取。
那么問(wèn)題來(lái)了:如果是采集的文章,keywords有可能是一些亂七八糟的詞,不管是在后臺(tái)一篇篇文章打開(kāi),還是把數(shù)據(jù)表下載回來(lái)一個(gè)個(gè)整理,都是非常麻煩的事,相對(duì)來(lái)說(shuō)整理dede_tagindex和dede_taglist這兩個(gè)容易得多,刪除亂詞就行了。
但這樣一來(lái),keywords與tags就不一致了。tags是正確的,而keywords卻很亂。但文章生成時(shí),顯示的還是keywords,前臺(tái)看到的tag這個(gè)標(biāo)簽還是亂的,自由列表、相關(guān)文章調(diào)用時(shí)就不是預(yù)期的結(jié)果。
研究了各個(gè)相關(guān)代碼后發(fā)現(xiàn),DEDE把tags復(fù)制一份再寫(xiě)入keywords其實(shí)是一個(gè)多余的做法,只要稍微修改一下調(diào)用代碼,這個(gè)keywords就可以廢棄不用。
比如生成文章的arc.archives.class.php本身有一個(gè)調(diào)用tags的函數(shù)$this->Fields['tags'] = GetTags($aid);根本不需要keywords這一步就把tags調(diào)出來(lái)了,而且模板代碼都解析好了。文章模板默認(rèn)是調(diào)用的keywords字段,換成tags字段一樣可顯示。
<meta name="keywords" content="{dede:field.keywords/}" />
改成如下就可以了
<meta name="keywords" content="{dede:field.tags/}" />
至于相關(guān)文章、自由列表什么的,同樣只需要添加GetTags($aid)這個(gè)函數(shù)就可以讀出來(lái),完全沒(méi)keywords什么事,主表中的keywords這個(gè)字段可以刪除或清空了。
在采集的時(shí)候,默認(rèn)是寫(xiě)入keywords字段而不理會(huì)tags的,很多人采集回來(lái)的文章只在文章頁(yè)面顯示所謂的tag,但真正的tag列表頁(yè)tags.php中卻看不到,再次說(shuō)明keywords的用處真的很小。
也就是說(shuō),keywords能發(fā)揮作用的地方,用tags替代的效果是一樣一樣的。而tags發(fā)揮作用的地方,keywords無(wú)能為力。那keywords其實(shí)就是一個(gè)多余的東西嘛!
采集時(shí)只寫(xiě)入keywords不寫(xiě)入tags怎么辦呢?當(dāng)然有辦法。因?yàn)镈EDE默認(rèn)就有寫(xiě)入tags的函數(shù)InsertTags($tag, $aid),只需要在采集文件中添加兩行代碼就可以了。思路就是:
1、讓tags=keywords
2、添加函數(shù)InsertTags($tag, $aid)
這樣凡是有keywords的,tags也一樣有了。總之就是keywords就是多余了。
如果追求完美主義,非要保留keywords字段且非要跟tags內(nèi)容相同,也容易:在生成文章的文件arc.archives.class.php中添加一個(gè)寫(xiě)入代碼,讓讀取出來(lái)的tags寫(xiě)進(jìn)keywords里就可以了。寫(xiě)法是這樣的:找到以下代碼
$this->dsql->ExecuteNoneQuery("Update `dede_archives` SET ismake=1 WHERE id='".$this->ArcID."'");
這個(gè)代碼是在生成文章以后,把文章?tīng)顟B(tài)修改為“已生成”,那就可以同時(shí)把keywords也變一變,改成這樣:
$this->dsql->ExecuteNoneQuery("Update `dede_archives` SET ismake=1,keywords='{$this->Fields[tags]}' WHERE id='".$this->ArcID."'");
以上修改我已經(jīng)實(shí)施了,原因就是采集時(shí)不小心采了很多亂亂的keywords回來(lái),留著惡心,清空了,連帶tags的相應(yīng)內(nèi)容也刪除了。然后利用“批量添加tags”的功能添加了很多,由于是在列表頁(yè)添加的,keywords還是為空,非要打開(kāi)文章編輯頁(yè)才會(huì)把keywords變得跟tags一致。由于文章有幾千篇,這顯示是不可能的事,所以就添加這個(gè)寫(xiě)入代碼,然后在把這幾千篇文章重新生成一遍,keywords就跟tags一樣了。
如果文章都生成靜態(tài)的話,其實(shí)真的可以把keywords這個(gè)字段刪除,只使用tags就可以了。
新聞熱點(diǎn)
疑難解答
圖片精選