dedecms关键词维护里面字数多的词优先字数少的词的解决办法
2023/03/11 10:14 魔司收录网 已浏览106次
织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现“创业方向”这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法:
我们找到并打开/include/arc.archives.class.php文件,在里面找到如下代码:
01 |
function ReplaceKeyword($kw,&$body) |
05 |
$kws = explode( "," ,trim($kw)); //以分好为间隔符 |
07 |
$karr = $kaarr = $GLOBALS[ 'replaced' ] = array(); |
10 |
$body = preg_replace( "#(<a(.*))(>)(.*)(<)(\/a>)#isU" , '\\1-]-\\4-[-\\6' , $body); |
22 |
$myrow = $this->dsql->GetOne( "SELECT * FROM #【分隔符】@__keywords WHERE keyword='$k' AND rpurl<>'' " ); |
26 |
$GLOBALS[ 'replaced' ][$k] = 0; |
27 |
$kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>" ; |
33 |
$query = "SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' ORDER BY rank DESC" ; |
34 |
$this->dsql->SetQuery($query); |
35 |
$this->dsql->Execute(); |
36 |
while ($row = $this->dsql->GetArray()) |
38 |
$key = trim($row[ 'keyword' ]); |
39 |
$key_url=trim($row[ 'rpurl' ]); |
41 |
$kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>" ; |
45 |
$body = @preg_replace( "#(^|>)([^<]+)(?=<|$)#sUe" , "_highlight('\\2', \$karr, \$kaarr, '\\1')" , $body); |
48 |
$body = preg_replace( "#(<a(.*))-\]-(.*)-\[-(\/a>)#isU" , '\\1>\\3<\\4' , $body); |
|
注意查找代码的时候先手动去掉代码里面的【分隔符】字样!
找到后将其替换为如下代码:
01 |
function ReplaceKeyword($kw,&$body) |
03 |
global $cfg_cmspath,$dsql; |
05 |
$kws = explode( "," ,trim($kw)); //以分好为间隔符 |
07 |
$karr = $kaarr = $GLOBALS[ 'replaced' ] = array(); |
09 |
$body = preg_replace( "/(<a(.*))(>)(.*)(<)(\/a>)/isU" , '\\1-]-\\4-[-\\6' , $body); |
10 |
$query= "SELECT * FROM #【分隔符】@__keywords WHERE rpurl<>'' and sta=1 ORDER BY length(keyword)desc" ; |
11 |
$dsql->SetQuery($query); |
13 |
while ($row = $dsql->GetArray()) |
15 |
$key = trim($row[ 'keyword' ]); |
16 |
$key_url=trim($row[ 'rpurl' ]); |
18 |
$kaarr[] = "<u><a href='$key_url' target='_blank'>$key</a></u>" ; |
20 |
foreach ($karr as $key => $word) |
22 |
$body = preg_replace( "/(^|>)([^<]+)(?=<|$)/sUe" , "_highlight( '\\2' , \$karr[$key], \$kaarr[$key], |
28 |
$body = preg_replace( "/(<a(.*))-\]-(.*)-\[-(\/a>)/isU" , '\\1>\\3<\\4' , $body);//暂时屏蔽超链接 |
29 |
$body = preg_replace( "/(<a(.*))(>)(.*)(<)(\/a>)/isU" , '\\1-]-\\4-[-\\6' , $body); |
32 |
$body = preg_replace( "/(<a(.*))-\]-(.*)-\[-(\/a>)/isU" , '\\1>\\3<\\4' , $body); |
39 |
//高亮专用, 替换多次是可能不能达到最多次 |
40 |
function _highlight($string, $words, $result, $pre) |
42 |
global $cfg_replace_num; |
43 |
$string = str_replace( '\"' , '"' , $string); |
44 |
if ($GLOBALS[ 'replaced' ][$words] == 1){ |
47 |
if ($cfg_replace_num > 0){ |
48 |
$string = preg_replace( "/" .preg_quote($words). "/" , $result, $string, $cfg_replace_num); |
49 |
if (strpos($string, $words) !== false ) |
51 |
$GLOBALS[ 'replaced' ][$words] = 1; |
54 |
else {$string = str_replace($words, $result, $string); |
|
注意手动去掉代码里面的【分隔符】字样!
替换完成后保存即可,然后生成一下文章内容试试。