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

我们找到并打开/include/arc.archives.class.php文件,在里面找到如下代码:

01 function ReplaceKeyword($kw,&$body)
02     {
03         global $cfg_cmspath;
04         $maxkey = 5;
05         $kws = explode(",",trim($kw));    //以分好为间隔符
06         $i=0;
07         $karr = $kaarr = $GLOBALS['replaced'] = array();
08  
09         //暂时屏蔽超链接
10         $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body);
11  
12         /*
13         foreach($kws as $k)
14         {
15             $k = trim($k);
16             if($k!="")
17             {
18                 if($i > $maxkey)
19                 {
20                     break;
21                 }
22                 $myrow = $this->dsql->GetOne("SELECT * FROM #【分隔符】@__keywords WHERE keyword='$k' AND rpurl<>'' ");
23                 if(is_array($myrow))
24                 {
25                     $karr[] = $k;
26                     $GLOBALS['replaced'][$k] = 0;
27                     $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
28                 }
29                 $i++;
30             }
31         }
32         */
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())
37         {
38             $key = trim($row['keyword']);
39             $key_url=trim($row['rpurl']);
40             $karr[] = $key;
41             $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
42         }
43  
44         // 这里可能会有错误
45         $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe","_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);
46  
47         //恢复超链接
48         $body = preg_replace("#(<a(.*))-\]-(.*)-\[-(\/a>)#isU",'\\1>\\3<\\4', $body);
49         return $body;
50     }

注意查找代码的时候先手动去掉代码里面的【分隔符】字样!

找到后将其替换为如下代码:

01     function ReplaceKeyword($kw,&$body)
02     {
03     global $cfg_cmspath,$dsql;
04     $maxkey = 5;
05     $kws = explode(",",trim($kw)); //以分好为间隔符
06     $i=0;
07     $karr = $kaarr = $GLOBALS['replaced'] = array();
08     //暂时屏蔽超链接
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);
12     $dsql->Execute();
13     while($row = $dsql->GetArray())
14     {
15     $key = trim($row['keyword']);
16     $key_url=trim($row['rpurl']);
17     $karr[] = $key;
18     $kaarr[] = "<u><a href='$key_url' target='_blank'>$key</a></u>";
19     }
20     foreach ($karr as $key => $word)
21     {
22     $body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', \$karr[$key], \$kaarr[$key],
23  
24  
25 '\\1')", $body);
26     //echo $body."<br/>";
27     //恢复超链接
28     $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body);//暂时屏蔽超链接
29     $body = preg_replace("/(<a(.*))(>)(.*)(<)(\/a>)/isU", '\\1-]-\\4-[-\\6', $body);
30     }
31     //恢复超链接
32     $body = preg_replace("/(<a(.*))-\]-(.*)-\[-(\/a>)/isU", '\\1>\\3<\\4', $body);
33  
34  
35     return $body;
36     }
37     }
38     //End Archives
39     //高亮专用, 替换多次是可能不能达到最多次
40     function _highlight($string, $words, $result, $pre)
41     {
42     global $cfg_replace_num;
43     $string = str_replace('\"', '"', $string);
44 if($GLOBALS['replaced'][$words] == 1){
45     return $pre.$string;
46     }
47 if($cfg_replace_num > 0){
48     $string = preg_replace("/".preg_quote($words)."/", $result, $string, $cfg_replace_num);
49     if(strpos($string, $words) !== false)
50     {
51         $GLOBALS['replaced'][$words] = 1;
52         }
53         }
54 else{$string = str_replace($words, $result, $string);
55 }
56 return $pre.$string;
57 }

注意手动去掉代码里面的【分隔符】字样!

替换完成后保存即可,然后生成一下文章内容试试。


AiteCms,企业模板快速建站专家,点击了解更多

 

转载自织梦模板教程(www.dede58.com)

dedecms关键词维护里面字数多的词优先字数少的词的解决办法的更多相关文章

  1. dedecms织梦首页被篡改 网站被黑被跳转的解决办法建议

    2018年的中秋节即将来临,我们Sine安全公司,最近接到很多用dedecms程序的企业公司网站客户的反馈,说是公司网站经常被篡改,包括网站首页的标题内容以及描述内容,都被改成了什么北京赛车,北京PK ...

  2. paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.

    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库. mmseg默认词库只能是文件格式...不好维护..要是不个词库放的个数据库里面走好维护兰.. 要实现2个目标..: 1 ...

  3. dedecms 后台发布后的文章不能编辑出现一片空白的解决办法

    dede后台无法写新文章也无法编辑以前的文档,文章编辑的地方无法写入,出现无法显示该页面的问题,这是怎么回事?我的dede在ftp中换过文件夹,是不是跟这个有关?该如何解决这个问题? 以下修改是针对d ...

  4. paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库.

    paip.禁用IKAnalyzer 的默认词库.仅仅使用自定义词库. 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

  5. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类   =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...

  6. Forth 采用Create,Does>定义新的词(word)& 延迟词技术

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. dedecms添加文章时提示标题为空,编辑文章时编辑器空白的解决办法

    dedecms添加文章时提示标题为空,编辑文章时编辑器空白的解决办法 dedecms出现这个问题与代码无关,主要是和PHP的版本有关,用的PHP5.4,更换成PHP5.2之后就不会有这个问题了. 问题 ...

  8. dedecms问答模块时间显示1970-01-01的解决办法

    在使用dedecms的问答模块的时候,很多人希望能在模板上加上问题的时间,一般我们采用这样的dede标签: {dede:ask row=24 titlelen='50' sort='ok'}   &l ...

  9. Linux系统环境下安装dedecms(织梦)提示http500错误的解决办法

    碰到一客户安装DEDE提示http500错误,问题已得到完美解决,下面我分享下 这个解决办法,希望有帮助. 故障状态:正常安装dedecms v5.7 gbk提示http500错误Dede安装环境:一 ...

随机推荐

  1. spring注解中@component是什么意思

    @Component("userManager") public class UserManagerImpl implements UserManager { private Us ...

  2. hdu 5269 ZYB loves Xor I &amp;&amp; BestCoder Round #44

    题意: ZYB喜欢研究Xor,如今他得到了一个长度为n的数组A. 于是他想知道:对于全部数对(i,j)(i∈[1,n],j∈[1,n]).lowbit(AixorAj)之和为多少.因为答案可能过大,你 ...

  3. crazyradio焊接和下载固件过程

    非常早之前买过一套crazyradio的器件和空板.可是一直没有时间焊接出来,前天早上六点起来,安静的弄了一把,识别USB.下载crazyradio固件没问题,记录下过程: 1,首先是焊接,寻常的QF ...

  4. 36.创建自定义的指令directive

    转自:https://www.cnblogs.com/best/tag/Angular/ 1. <html> <head> <meta charset="utf ...

  5. Python Schema使用说明

    转自https://segmentfault.com/a/1190000011777230 Python Schema使用说明 Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个 ...

  6. 如何安装MySQL?(二)

    MYSQL的两种安装方式 MSI安装 ZIP安装 第一步: 第二步: 第三步: 这里我选择下载到桌面吧! 第四步: 第五步: 第六步: 第七步: 典型安装:除了安装MySQL的服务器,还安装MySQL ...

  7. Oracle 建表

    -- Create table create table STUDENT ( sno ) not null, sname ) not null, ssex ) not null, sbirthday ...

  8. iview中键盘上下左右事件的方法

    document.addEventListener('keydown', function(e){ var keyCode = e.keyCode; // Esc slide-up ) { e.pre ...

  9. hiho147周 - 数据结构 bitset

    题目链接 n个5维数,对于每个数,输出小于他的数的个数(每个维度都比他小); #include <cstdio> #include <cstring> #include < ...

  10. Chrome Service Model

    Chrome Service Model John Abd-El-Malek February 2016 Objective Move Chrome codebase towards a servic ...