织梦后台的关键词维护默认的情况是字数少的词优先于字数多的词,比如我们有两个这样的词:创业、创业方向,第二个词包含了第一个词,在文章中如果出现“创业方向”这个词,默认情况下只会给创业两个字添加关键词超链接,而不是整个词,那么我们怎么样才能实现字数多的词优先于字数少的词呢?下面就告诉大家具体的解决方法:
我们找到并打开/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)