解析dedecms使用關(guān)鍵詞關(guān)聯(lián)文章無(wú)效的解決方法
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-03-19 21:29:54 閱讀次數(shù):2422次
前段時(shí)間因?yàn)橐恢睕](méi)用這個(gè)使用關(guān)鍵詞關(guān)聯(lián)文章的功能,所以一直沒(méi)在意,但最近發(fā)現(xiàn)內(nèi)連建設(shè)好了,對(duì)于文章的排名起很大的作用,于是就開(kāi)始整理內(nèi)鏈,但是在操作過(guò)程中遇到了很多問(wèn)題,dede無(wú)法自動(dòng)替換關(guān)鍵詞,無(wú)法使用關(guān)鍵詞關(guān)聯(lián)文章等等,于是就開(kāi)始在網(wǎng)上找,找了很多方法,不能說(shuō)沒(méi)有用,但是每個(gè)都有缺點(diǎn),于是自己就開(kāi)始研究了,經(jīng)過(guò)半天的努力,終于讓我搞明白了,今天就給大家分享出來(lái)。
按dede默認(rèn)的如何才能正確替換關(guān)鍵詞? 1.需要你在后臺(tái)設(shè)置關(guān)鍵詞鏈接地址,2。需要你在系統(tǒng)的基本參數(shù)設(shè)置里找到 核心設(shè)置---關(guān)鍵字替換(是/否)使用本功能會(huì)影響HTML生成速度:選是,3.需要你在系統(tǒng)基本參數(shù)里 找到性能選項(xiàng)----使用關(guān)鍵詞關(guān)連文章: 是。 4.然后再發(fā)布內(nèi)容的時(shí)候 需要你在內(nèi)容的tags里填上 你想替換的關(guān)鍵詞(V5.7以下版本) V5.7以上版本的需要你在文章的關(guān)鍵詞里填入你想替換的關(guān)鍵詞或者關(guān)鍵詞不能為空。只有滿足這些時(shí),dede才會(huì)替換你想要替換的關(guān)鍵詞。比如我在我的網(wǎng)站發(fā)布一篇文章http://www.ixuela.com/yingyu/yufa/12944.html,我想把里面的 名詞,代詞等幾個(gè)關(guān)鍵詞連接到我想要的頁(yè)面,但是我發(fā)布的時(shí)候很懶,也不想填tags和關(guān)鍵詞,這樣發(fā)布的時(shí)候就無(wú)法替換關(guān)鍵詞鏈接了,通過(guò)以下方法就可以不用填tags和關(guān)鍵詞就能替換。
很多朋友在發(fā)布文章時(shí),一半不填寫關(guān)鍵詞,或者Tags,那么久這個(gè)功能就無(wú)效了。那么如何解決呢? 讓我們先看下 解決錢的dede默認(rèn)的代碼,和解決后的代碼,分析以下 就明白了。。
代碼有2個(gè)部分,一是在arc.archives.class。php 里第204行左右。一個(gè)是在最后面的function ReplaceKeyword($kw,&$body)函數(shù),讓我們看看解決前和解決后的代碼的不同吧。
解決前:204行代碼:
if($arr['type']=='htmltext' && $GLOBALS['cfg_keyword_replace']=='Y' && !empty($this->Fields['keywords']))
{
$this->Fields[$nk] = $this->ReplaceKeyword($this->Fields['keywords'],$this->Fields[$nk]);
}
解決前 ReplaceKeyword函數(shù)的代碼:
function ReplaceKeyword($kw,&$body)
{
global $cfg_cmspath;
$maxkey = 5;
$kws = explode(",",trim($kw)); //以分好為間隔符
$i=0;
$karr = $kaarr = $GLOBALS['replaced'] = array();
//暫時(shí)屏蔽超鏈接
$body = preg_replace("/(<a(.*))(>)(.*)(<)(/a>)/isU", '1-]-4-[-6', $body);
foreach($kws as $k)
{
$k = trim($k);
if($k!="")
{
if($i > $maxkey)
{
break;
}
$myrow = $this->dsql->GetOne("select * from [url=mailto:dede_keywords]dede_keywords[/url] where keyword='$k' And rpurl<>'' ");
if(is_array($myrow))
{
$karr[] = $k;
$GLOBALS['replaced'][$k] = 0;
$kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
}
$i++;
}
}
$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('2', $karr, $kaarr, '1')", $body);
//恢復(fù)超鏈接
$body = preg_replace("/(<a(.*))-]-(.*)-[-(/a>)/isU", '1>3<[url=file://4]4'[/url], $body);
return $body;
}
解決后 204行代碼:
if($arr['type']=='htmltext' && $GLOBALS['cfg_keyword_replace']=='Y')
{
$this->Fields[$nk] = $this->ReplaceKeyword($this->Fields['keywords'],$this->Fields[$nk]);
}
解決后 ReplaceKeyword函數(shù)的代碼
function ReplaceKeyword($kw,&$body)
{
global $cfg_cmspath;
$maxkey = 5;
$kws = explode(",",trim($kw)); //以分好為間隔符
$i=0;
$karr = $kaarr = $GLOBALS['replaced'] = array();
//暫時(shí)屏蔽超鏈接
$body = preg_replace("/(<a(.*))(>)(.*)(<)(/a>)/isU", '1-]-4-[-6', $body);
global $dsql;
$query="SELECT * FROM [url=mailto:dede_keywords]dede_keywords[/url] WHERE rpurl<>'' ORDER BY rank DESC";
$dsql->SetQuery($query);
$dsql->Execute();
while($row = $dsql->GetArray())
{
$key = trim($row['keyword']);
$key_url=trim($row['rpurl']);
$karr[] = $key;
$kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
}
$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('2', $karr, $kaarr, '1')", $body);
//恢復(fù)超鏈接
$body = preg_replace("/(<a(.*))-]-(.*)-[-(/a>)/isU", '1>3<[url=file://4]4'[/url], $body);
return $body;
}
先分析204行的代碼,細(xì)心的朋友可能已經(jīng)發(fā)現(xiàn),解決后的代碼比解決前少了&& !empty($this->Fields['keywords'] 對(duì)就是這個(gè)原因,dede獲取關(guān)鍵詞的時(shí)候要判斷你這篇文章是否填了關(guān)鍵詞,這個(gè)我們一半不填,所以把他去掉就行了,還有的朋友說(shuō)應(yīng)該把cfg_keyword_replace 換成 cfg_keyword_like 他認(rèn)為是dede的人寫錯(cuò)了,其實(shí)是自己沒(méi)有看清罷了,其實(shí)不用換這個(gè)的,因?yàn)樗麄兇淼木筒皇且粋€(gè)意思。
cfg_keyword_replace是指關(guān)鍵字替換(是/否)使用本功能會(huì)影響HTML生成速度: 這項(xiàng) 而cfg_keyword_like 是指使用關(guān)鍵詞關(guān)連文章:
然后我們?cè)诜治鯮eplaceKeyword 原本的dede是從你所填的tag里 遍歷tags,然后與你設(shè)置的文檔關(guān)鍵詞相比較,如果找到了,就將這個(gè)關(guān)鍵詞替換成帶鏈接的關(guān)鍵詞,如果tags為空,就無(wú)法執(zhí)行了。這就是為什么大家使用文檔關(guān)鍵詞關(guān)聯(lián)文章失敗的原因,而解決方法中,直接不讓他遍歷tags,直接去替換,這樣就解決了。
但是出現(xiàn)了幾個(gè)問(wèn)題。1,這樣解決在生成文章的時(shí)候速度會(huì)降低,2,無(wú)法控制總的關(guān)鍵詞鏈接數(shù)量。希望有高手能夠解決下。
出處:http://www.ixuela.com
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)