织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现“创业方向”这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法:
我们找到并打开/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); |
|
注意手动去掉代码里面的【分隔符】字样!
替换完成后保存即可,然后生成一下文章内容试试。
转载自织梦模板教程(www.dede58.com)
AiteCms,企业模板快速建站专家,点击了解更多